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 trong SQL Server

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 UNIONJOIN:

UNION so với JOIN trong SQL Server

Ví dụ về UNION trong SQL Server

Xem các bảng staffscustomers trong cơ sở dữ liệu mẫu BikeStores.

UNION trong SQL Server
UNION trong SQL Server

Ví dụ UNIONUNION 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;
Ví dụ UNION và UNION ALL trong SQL Server

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ụ UNIONORDER 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;
Ví dụ UNION và ORDER BY trong SQL Server

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.

SQL Server
Bài Viết Liên Quan:
INTERSECT trong SQL Server
Trung Nguyen 22/11/2020
INTERSECT trong SQL Server

Tìm hiểu cách sử dụng toán tử INTERSECT trong SQL Server để trả về phần giao nhau của các tập kết quả của hai truy vấn.

EXCEPT trong SQL Server
Trung Nguyen 22/11/2020
EXCEPT trong SQL Server

Tìm hiểu cách sử dụng EXCEPT trong SQL Server để loại trừ tập kết quả của một truy vấn ra khỏi tập kết quả của một truy vấn khác.

SQL Server: Hướng dẫn subquery trong SQL Server từ A-Z
Trung Nguyen 22/11/2020
SQL Server: Hướng dẫn subquery trong SQL Server từ A-Z

Tìm hiểu về subquery, toán tử EXISTS, ANY, ALL trong SQL Server và cách sử dụng truy vấn con để truy vấn dữ liệu.

Toán tử ALL trong SQL Server
Trung Nguyen 21/11/2020
Toán tử ALL trong SQL Server

Trong hướng dẫn này, bạn sẽ tìm hiểu cách sử dụng toán tử ALL trong SQL Server để so sánh một giá trị với danh sách tập hợp giá trị cột đơn.