UNION trong SQL Server
Trong hướng dẫn này, bạn sẽ tìm hiểu cách sử dụng UNION
trong SQL Server để kết hợp kết quả của hai hoặc nhiều truy vấn thành một tập kết quả duy nhất.
Giới thiệu về UNION trong SQL Server
UNION
trong SQL Server là một trong những toán tử tập hợp cho phép bạn kết hợp các kết quả của hai câu lệnh SELECT
thành một tập kết quả duy nhất bao gồm tất cả các bản ghi thuộc về hai câu lệnh SELECT
.
Sau đây minh họa cú pháp của UNION
trong SQL Server:
query_1
UNION
query_2
Dưới đây là các yêu cầu đối với các truy vấn trong cú pháp trên:
- Số lượng và thứ tự của các cột phải giống nhau trong cả hai truy vấn.
- Các kiểu dữ liệu của các cột tương ứng phải giống nhau hoặc tương thích.
Biểu đồ Venn sau đây minh họa cách tập hợp kết quả của hợp nhất bảng T1 với tập kết quả của bảng T2:

UNION
so với UNION ALL
Theo mặc định, toán tử UNION
loại bỏ tất cả các bản ghi trùng lặp khỏi tập kết quả. Tuy nhiên, nếu bạn muốn giữ lại các hàng trùng lặp, bạn cần chỉ định từ khóa ALL
một cách rõ ràng như dưới đây:
query_1
UNION ALL
query_2
Nói cách khác, toán tử UNION
sẽ loại bỏ các bản ghi trùng lặp trong khi toán tử UNION ALL
sẽ bao gồm các bản ghi trùng lặp trong tập kết quả cuối cùng.
UNION
so với JOIN
Phép nối chẳng hạn như INNER JOIN
hoặc LEFT JOIN
kết hợp các cột từ hai bảng trong khi UNION
kết hợp các bản ghi từ hai truy vấn.
Nói cách khác, join nối kết quả theo chiều ngang trong khi union nối kết quả theo chiều dọc.
Hình ảnh sau đây minh họa sự khác biệt chính giữa UNION
và JOIN
:

Ví dụ về UNION trong SQL Server
Xem các bảng staffs
và customers
trong cơ sở dữ liệu mẫu BikeStores.


Ví dụ UNION
và UNION ALL
Ví dụ sau kết hợp tên của nhân viên và khách hàng thành một danh sách:
SELECT
first_name,
last_name
FROM
sales.staffs
UNION
SELECT
first_name,
last_name
FROM
sales.customers;

Truy vấn trên trả về 1.454 bản ghi.
Bảng staffs
có 10 bản ghi và bảng khách hàng có 1.445 bản ghi như trong các truy vấn sau đây:
SELECT
COUNT (*)
FROM
sales.staffs;
-- 10
SELECT
COUNT (*)
FROM
sales.customers;
-- 1445
Bởi vì tập kết quả của union chỉ trả về 1.454 bản ghi, điều đó có nghĩa là một bản ghi trùng lặp đã bị loại bỏ.
Để bao gồm các bản ghi trùng lặp, bạn sử dụng toán tử UNION ALL
như trong truy vấn sau:
SELECT
first_name,
last_name
FROM
sales.staffs
UNION ALL
SELECT
first_name,
last_name
FROM
sales.customers;
Truy vấn trả về 1.455 bản ghi như mong đợi.
Ví dụ UNION
và ORDER BY
Để sắp xếp tập kết quả được trả về bởi toán tử UNION
, bạn đặt mệnh đề ORDER BY
trong truy vấn cuối cùng như sau:
SELECT
select_list
FROM
table_1
UNION
SELECT
select_list
FROM
table_2
ORDER BY
order_list;
Ví dụ: để sắp xếp họ và tên của khách hàng và nhân viên, bạn sử dụng truy vấn sau:
SELECT
first_name,
last_name
FROM
sales.staffs
UNION ALL
SELECT
first_name,
last_name
FROM
sales.customers
ORDER BY
first_name,
last_name;

Trong hướng dẫn này, bạn đã tìm hiểu cách sử dụng UNION
trong SQL Server để kết hợp các bản ghi từ nhiều truy vấn thành một tập kết quả duy nhất.