Union SQL là gì

UNION trong SQL Server

Đăng bởi Trung Nguyen một năm trước 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.

Tags:
SQL Server

Video liên quan

Chủ Đề