Giả sử cơ sở dữ liệu Access có hai bảng không liên quan – một lưu trữ dữ liệu khách hàng và một lưu trữ dữ liệu về nhà cung cấp – và cả hai bảng có một trường thông tin liên hệ. Bạn muốn xem thông tin liên hệ từ cả hai bảng trong một dạng xem. Để thực hiện điều này, trước tiên tạo một truy vấn chọn cho mỗi bảng để truy xuất thông tin liên hệ và sau đó kết hợp các kết quả bằng cách tạo truy vấn hợp.
GHI CHÚ: Nội dung trong bài viết này nhằm để sử dụng với truy nhập cơ sở dữ liệu. Bạn không thể tạo hoặc sử dụng truy vấn hợp trong cơ sở dữ liệu web Access hoặc ứng dụng web Access.
Cần ôn lại cách tạo truy vấn chọn cơ bản? Hãy xem tạo một truy vấn chọn.
Trước tiên, có một vài điểm cần phải biết về việc tạo truy vấn hợp:
- Truy vấn chọn mà bạn kết hợp trong truy vấn hợp cần có cùng một số trường đầu ra, theo cùng một thứ tự và có kiểu dữ liệu phải giống nhau hoặc tương thích. Khi bạn chạy một truy vấn hợp, dữ liệu từ mỗi tập hợp của trường tương ứng được kết hợp thành một trường đầu ra để đầu ra truy vấn có cùng một số trường như mỗi một câu lệnh SELECT.
- Truy vấn hợp là truy vấn SQL và do đó, phải được ghi trực tiếp trong SQL. Bạn chuyển sang Dạng xem SQL để ghi truy vấn SQL, bao gồm cả truy vấn hợp.
Bước 1: Tạo truy vấn chọn
GHI CHÚ: Mặc dù bạn có thể đưa vào nhiều bảng hoặc truy vấn trong một truy vấn, thủ tục này giả định rằng mỗi truy vấn chọn của bạn bao gồm dữ liệu từ một bảng duy nhất.
- Trên tab Tạo, trong nhóm Truy vấn, bấm Thiết kế Truy vấn.
- Trong hộp thoại Hiện Bảng, bấm đúp vào bảng có trường mà bạn muốn bao gồm. Thêm bảng vào cửa sổ thiết kế truy vấn.
- Đóng hộp thoại Hiện Bảng.
- Trong cửa sổ thiết kế truy vấn, hãy bấm đúp vào mỗi trường mà bạn muốn bao gồm.
Khi bạn chọn trường, hãy đảm bảo rằng bạn thêm cùng số trường, trong cùng một thứ tự mà bạn thêm vào truy vấn chọn khác. Hết sức chú ý đến kiểu dữ liệu của trường và đảm bảo rằng chúng có kiểu dữ liệu tương thích với trường trong cùng một vị trí, trong truy vấn khác mà bạn đang kết hợp. Ví dụ: Nếu truy vấn chọn đầu tiên của bạn có năm trường, trường đầu tiên chứa dữ liệu ngày/thời gian, hãy đảm bảo rằng mỗi truy vấn chọn khác mà bạn đang kết hợp cũng có năm trường, trường đầu tiên chứa dữ liệu ngày/thời gian v.v. - Hoặc bạn có thể thêm tiêu chí vào trường của bạn bằng cách nhập biểu thức thích hợp trong hàng tiêu chí của lưới trường.
- Sau khi bạn đã hoàn tất việc thêm trường và tiêu chí trường, bạn nên chạy truy vấn chọn và xem lại kết quả của nó. Trên tab thiết kế , trong nhóm kết quả , bấm chạy.
- Chuyển truy vấn sang dạng xem Thiết kế.
- Lưu truy vấn chọn và để truy vấn mở.
- Lặp lại thủ tục này cho mỗi truy vấn chọn mà bạn muốn kết hợp.
Để biết thêm thông tin về cách sử dụng tiêu chí trong truy vấn, hãy xem áp dụng tiêu chí vào truy vấn.
Bước 2: Kết hợp các truy vấn chọn
Trong bước này, bạn tạo truy vấn hợp bằng cách sử dụng câu lệnh SQL. (Để biết thêm thông tin, hãy xem phần cú pháp SQL , bên dưới.)
- Trên tab Tạo, trong nhóm Truy vấn, bấm Thiết kế Truy vấn.
- Đóng hộp thoại Hiện Bảng.
- Trên tab Thiết kế, trong nhóm Truy vấn, bấm Hợp.
Access ẩn cửa sổ thiết kế truy vấn và hiển thị tab đối tượng dạng xem SQL. Tại thời điểm này, tab đối tượng của dạng xem SQL đang trống.
- Hãy bấm vào tab cho truy vấn chọn đầu tiên mà bạn muốn kết hợp trong truy vấn hợp.
- Trên trang đầu tab, hãy bấm xem > Dạng xem SQL.
- Sao chép câu lệnh SQL cho truy vấn chọn. Bấm vào tab cho truy vấn hợp mà bạn đã bắt đầu để tạo trong bước 1.
- Dán câu lệnh SQL cho truy vấn chọn vào tab đối tượng của dạng xem SQL của truy vấn hợp.
- Xóa bỏ dấu chấm phẩy (;) ở cuối câu lệnh SQL của truy vấn chọn.
- Nhấn Enter để di chuyển con trỏ xuống một dòng, rồi nhập UNION trên dòng mới.
- Hãy bấm vào tab cho truy vấn chọn tiếp theo mà bạn muốn kết hợp trong truy vấn hợp.
- Lặp lại từ bước 5 tới bước 10 cho tới khi bạn đã sao chép và dán tất cả câu lệnh SQL cho truy vấn chọn vào trong cửa sổ dạng xem SQL của truy vấn hợp. Không xóa bỏ dấu chấm phẩy hoặc nhập bất cứ ký tự gì sau câu lệnh SQL cho truy vấn chọn cuối cùng.
- Trên tab Thiết kế, trong nhóm Kết quả, bấm Chạy.
Kết quả của truy vấn hợp sẽ xuất hiện trong Dạng xem biểu dữ liệu.
Mẹo dùng truy vấn hợp
- Để có thể phân biệt hàng nào đến từ bảng nào, hãy thêm một chuỗi văn bản làm trường trong mỗi câu lệnh chọn của bạn.Ví dụ, nếu một câu lệnh chọn đang truy xuất trường từ một bảng có tên là Products và câu lệnh chọn khác đang truy xuất trường từ một bảng có tên là Services, hãy thêm chuỗi "Product" làm trường ở cuối câu lệnh đầu tiên và "Service" ở cuối câu lệnh thứ hai. Bạn cũng có thể gán một biệt danh trường (ví dụ: "type") cho chuỗi bằng cách dùng từ khóa AS (LÀM) như được hiện trong ví dụ sau đây:SELECT field1, field2, ... "Product" AS typeSELECT field1, field2, ... "Service" AS typeĐầu ra của truy vấn sẽ bao gồm một trường có tên là "type" hiển thị cho dù hàng bắt nguồn từ bảng Products hay từ bảng Services.
- Mỗi từ khóa UNION kết hợp câu lệnh SELECT ngay phía trước và sau nó. Nếu bạn dùng từ khóa ALL với vài từ khóa UNION trong truy vấn của bạn, nhưng không dùng với các từ khóa khác, kết quả sẽ bao gồm hàng trùng nhau từ các cặp câu lệnh SELECT được kết hợp bằng cách dùng UNION ALL nhưng sẽ không bao gồm hàng trùng nhau từ câu lệnh SELECT được kết hợp bằng cách dùng từ khóa UNION mà không dùng từ khóa ALL.
- Số, kiểu dữ liệu và thứ tự của các trường trong truy vấn chọn phải tương ứng. Bạn có thể dùng biểu thức như các phép tính hoặc các truy vấn con để làm cho chúng phù hợp với nhau.Ví dụ: Bạn có thể khớp một trường năm có hai ký tự với một trường năm có bốn ký tự bằng cách dùng hàm Right để trích xuất hai chữ số cuối cùng của năm có bốn ký tự.
Dùng kết quả của truy vấn hợp để tạo một bảng mới
Trước tiên, dùng truy vấn hợp làm đầu vào cho một truy vấn chọn mới, sau đó dùng truy vấn chọn đó làm cơ sở của truy vấn tạo bảng, như minh họa trong các bước sau đây:
- Tạo và lưu truy vấn hợp.
- Trên tab Tạo, trong nhóm Truy vấn, bấm Thiết kế Truy vấn.
- Trong hộp thoại Hiện Bảng, hãy bấm tab Truy vấn.
- Bấm đúp vào truy vấn hợp rồi sau đó đóng hộp thoại Hiện Bảng.GHI CHÚ: Nếu bạn thấy cảnh báo Bảo mật trong Thanh Thông báo, truy vấn hành động có thể bị tắt. Để bật truy vấn hành động, hãy bấm Cho phép Nội dung trên Thanh Thông báo.
- Trong lưới thiết kế truy vấn, trên tab đối tượng của truy vấn hợp, hãy bấm đúp vào dấu hoa thị (*) để dùng tất cả các trường của truy vấn hợp để tạo bảng mới.
- Trên tab Thiết kế, trong nhóm Kiểu Truy vấn, hãy bấm Tạo Bảng.
- Trong hộp thoại Tạo Bảng, hãy nhập tên cho bảng mới.
- Bạn có thể tùy ý xác định một cơ sở dữ liệu khác để tạo bảng trong đó.
- Bấm OK.
- Trên tab Thiết kế, trong nhóm Kết quả, bấm Chạy.
Dùng truy vấn hợp để thực hiện một nối ngoài đầy đủ
Bạn có thể dùng một truy vấn hợp để thực hiện một nối ngoài. Nối ngoài đầy đủ không hạn chế hàng được trả về từ bảng đã nối nhưng có kết hợp hàng trên cơ sở giá trị trong trường nối.
- Tạo một truy vấn có một nối ngoài trái trên trường mà bạn muốn dùng cho một nối ngoài đầy đủ.
- Trên tab Trang đầu, trong nhóm Dạng xem, hãy bấm Dạng xem rồi bấm Dạng xem SQL.
- Nhấn phím Ctrl+C để sao chép mã SQL.
- Xóa bỏ dấu chấm phẩy ở cuối mệnh đề FROM rồi sau đó nhấn phím Enter.
- Nhập UNION, sau đó nhấn Enter.GHI CHÚ: Không dùng từ khóa ALL khi bạn dùng truy vấn hợp để thực hiện một nối ngoài đầy đủ.
- Nhấn phím Ctrl+V để dán mã SQL mà bạn đã sao chép trong bước 3.
- Trong mã mà bạn đã dán, hãy thay đổi LEFT JOIN thành RIGHT JOIN.
- Xóa bỏ dấu chấm phẩy ở cuối mệnh đề FROM thứ hai rồi sau đó nhấn phím Enter.
- Thêm mệnh đề WHERE xác định rằng giá trị của trường nối là giá trị NULL trong bảng đầu tiên được liệt kê trong mệnh đề FROM (bảng bên trái).Ví dụ: nếu mệnh đề FROM là:
FROM Products RIGHT JOIN [Order Details] ON Products.ID = [Order Details].[Product ID]
Bạn có thể thêm mệnh đề WHERE sau đây:WHERE Products.ID IS NULL - Nhập một dấu chấm phẩy (;) ở cuối của mệnh đề WHERE để chỉ ra điểm kết thúc của truy vấn hợp.
- Trên tab Thiết kế, trong nhóm Kết quả, hãy bấm Chạy.
Kết quả của truy vấn hợp sẽ xuất hiện trong Dạng xem biểu dữ liệu.
Để biết thêm thông tin, hãy xem gia nhập nguồn dữ liệu trong một truy vấn.
Yêu cầu và cú pháp SQL cho một truy vấn hợp
Vài yêu cầu cho truy vấn hợp
- Truy vấn chọn mà bạn kết hợp trong truy vấn hợp cần có cùng một số trường đầu ra, theo cùng thứ tự và có kiểu dữ liệu phải giống nhau hoặc tương thích. Khi bạn chạy một truy vấn hợp, dữ liệu từ mỗi tập hợp của trường tương ứng được kết hợp thành một trường đầu ra để đầu ra truy vấn có cùng một số trường như mỗi một câu lệnh SELECT.GHI CHÚ: Để thực hiện truy vấn hợp, kiểu dữ liệu Số và Văn bản là tương thích.
- Truy vấn hợp là SQL cụ thể và do đó, phải được ghi trực tiếp trong SQL. Bạn chuyển sang Dạng xem SQLđể ghi truy vấn SQL, bao gồm cả truy vấn hợp.
Cú pháp SQL của một truy vấn hợp
Trong một truy vấn hợp, mỗi truy vấn chọn (cũng được gọi là câu lệnh SELECT) có những mệnh đề sau:
Mệnh đề
|
Có chứa danh sách…
|
SELECT
|
các trường có chứa dữ liệu mà bạn muốn truy xuất.
|
FROM
|
các bảng có chứa các trường đó.
|
Tùy chọn WHERE
|
tiêu chí cho những trường này.
|
Câu lệnh SELECT được kết hợp bằng cách dùng từ khóa UNION.
Cú pháp SQL cơ bản cho một truy vấn hợp như sau:
SELECT field_1[, field_2,…]
FROM table_1[, table_2,…]
UNION [ALL]
SELECT field_a[, field_b,...]
FROM table_a[, table_b,…];
Ví dụ: Nếu cơ sở dữ liệu của bạn có một bảng có tên là Products và một bảng khác có tên là Services và cả hai bảng đều có các trường chứa tên của sản phẩm hoặc dịch vụ, giá cả, bảo hành hoặc sự sẵn sàng bảo đảm và cho dù bạn chào bán sản phẩm hoặc dịch vụ dành riêng nào. Mặc dù bảng Products lưu trữ thông tin bảo hành và bảng Services lưu trữ thông tin bảo đảm nhưng thông tin cơ bản cũng giống như vậy (cho dù một sản phẩm hoặc dịch vụ đặc biệt kèm theo một cam kết về chất lượng). Bạn có thể dùng một truy vấn hợp như ví dụ sau đây để kết hợp bốn trường từ hai bảng:
SELECT name, price, warranty_available, exclusive_offer
FROM Products
UNION ALL
SELECT name, price, guarantee_available, exclusive_offer
FROM Services;
Hãy cùng kiểm tra ví dụ về cú pháp trên đây, theo từng dòng một:
Cú pháp
|
Giải thích
|
Thông tin bổ sung
|
SELECT name, price, warranty_available, exclusive_offer
|
Mệnh đề SELECT đầu tiên
|
SELECT được tiếp theo sau bằng một danh sách các mã định danh chỉ ra các trường mà bạn muốn truy xuất dữ liệu từ đó.
Mệnh đề SELECT phải liệt kê ít nhất một trường.
Mệnh đề SELECT này liệt kê mã định danh trường name, price, warranty_available và exclusive_offer.
|
FROM Products
|
Mệnh đề FROM đầu tiên
|
Mệnh đề FROM tiếp sau một mệnh đề SELECT và chúng cùng nhau hình thành nên một câu lệnh SELECT cơ bản.
FROM được tiếp theo sau bằng một danh sách các mã định danh chỉ ra bảng nào chứa trường được liệt kê trong mệnh đề SELECT.
Mệnh đề FROM phải liệt kê ít nhất một bảng.
Mệnh đề FROM này liệt kê Products của mã định danh bảng.
|
UNION ALL
|
Từ khóa UNION và từ khóa ALL tùy chọn
|
Kết quả của câu lệnh SELECT đặt trước UNION sẽ được kết hợp cùng với kết quả của câu lệnh SELECT đứng sau UNION.
Khi bạn dùng từ khóa ALL, hàng trùng nhau sẽ không bị loại bỏ khỏi kết quả truy vấn hợp.
Bằng cách dùng từ khóa ALL, truy vấn có thể chạy nhanh hơn vì Access không phải kiểm tra các hàng trùng nhau.
Dùng từ khóa ALL nếu bất cứ điều kiện nào sau đây là đúng:
|
SELECT name, price, guarantee_available, exclusive_offer
|
Mệnh đề SELECT thứ hai
|
Một số quy tắc:
GHI CHÚ: Tên của trường trong đầu ra của truy vấn hợp là từ mệnh đề SELECT đầu tiên. Do đó, trong ví dụ của chúng ta, dữ liệu từ trường "warranty_available" và từ trường "guarantee_available" được đặt tên là "warranty_available" trong kết quả truy vấn.
|
FROM Services
|
Mệnh đề FROM thứ hai
|
Không có hạn chế trên các bảng trong mệnh đề FROM của một truy vấn hợp. Bạn có thể tạo một truy vấn hợp dùng bảng giống nhau trong mỗi mệnh đề FROM. Bạn có thể có các số bảng khác nhau trong mệnh đề FROM. Trong ví dụ của chúng ta, mỗi mệnh đề FROM có một bảng duy nhất.
|
0 comments: