union all & union in SQL

Trở lại với series chia sẻ kiến thức “SQL cho người mới học”. Bài viết này, Học viện GNV sẽ giới thiệu đến bạn toán tử Union thông dụng và được sử dụng rất nhiều trong thực tế.

Xem thêm: Lịch khai giảng các khóa học SQL tại đây

“UNION trong SQL server”

Toán tử UNION trong SQL được sử dụng để kết hợp kết quả của hai hoặc nhiều câu lệnh SELECT với nhau. Toán tử UNION trong SQL sẽ xóa bỏ các dòng kết quả bị trùng giữa các mệnh đề Select.

Lưu ý:  Mỗi mệnh đề Select trong phép Union trong SQL phải có cùng số lượng cột với nhau và giá trị giữa các cột tương ứng phải có cùng kiểu dữ liệu.

Cú pháp sử dụng toán tử UNION trong SQL:

SELECT [Column_name_1], [Column_name_2],…,[Column_name_n]
FROM tables_1
WHERE (yêu cầu/ điều kiện truy vấn nếu có)
UNION
SELECT [Column_name_1], [Column_name_2],…,[Column_name_n]
FROM tables_2
WHERE (yêu cầu/ điều kiện truy vấn nếu có)

Ví dụ minh họa toán tử UNION:
union in sql

Giả sử Table 1 và Table 2, chúng ta sẽ có nhiều cột dữ liệu khác nhau. Nhưng trong ví dụ này chúng ta chỉ muốn lấy hai cột dữ liệu là Column 1 và Column 2 ở Table 1 và Table 2. Vì vậy, cú pháp sẽ như sau:

SELECT  [Column 1], [Column 2]
FROM Table_1
UNION
SELECT  [Column 1], [Column 2]
FROM Table_1

Các bạn lưu ý số cột chùng ta chọn ở mỗi mệnh đề Select là bằng nhau, và kiểu dữ liệu ở mỗi cột là giống nhau nhé.

Kết quả có 1 dòng  [ a | b ] bị trùng đã bị xóa, do lệnh UNION sẽ loại bỏ các dòng bị trùng lặp. Tuy nhiên, nếu bạn muốn kết quả trả lại không bị xóa một dòng dữ liệu nào chúng ta sẽ dùng Toán tử
UNION ALL

Toán tử UNION ALL trong SQL Server có cách sử dụng tương tự như UNION, thay vì sử dụng UNION thì chúng ta sẽ thêm ALL sau UNION. 

Cú pháp sử dụng toán tử UNION ALL trong SQL:

SELECT [Column_name_1], [Column_name_2],…,[Column_name_n]
FROM tables_1
WHERE (yêu cầu/ điều kiện truy vấn nếu có)
UNION ALL
SELECT [Column_name_1], [Column_name_2],…,[Column_name_n]
FROM tables_2
WHERE (yêu cầu/ điều kiện truy vấn nếu có)

Ví dụ minh họa UNION ALL:
union all trong SQL

Chúng ta sẻ sử dụng lại ví dụ trên, nhưng trong ví dụ này kết quả trả lại sẽ là 6 dòng thay vì 5 dòng khi sử dụng UNION

SELECT  [Column 1], [Column 2]
FROM Table_1
UNION ALL
SELECT  [Column 1], [Column 2]
FROM Table_1

Các bạn lưu ý khi sử dụng UNION và  UNION ALL thì số cột chùng ta chọn ở mỗi mệnh đề Select là bằng nhau, và kiểu dữ liệu ở mỗi cột là giống nhau nhé.

Kết hợp toán tử UNION cùng với các mệnh đề khác

1/ Toán tử UNION và UNION ALL

SELECT [Column_name_1], [Column_name_2],…,[Column_name_n]
FROM tables_1
WHERE (yêu cầu/ điều kiện truy vấn nếu có)
UNION ALL
(
SELECT [Column_name_1], [Column_name_2],…,[Column_name_n]
FROM tables_1
WHERE (yêu cầu/ điều kiện truy vấn nếu có)
UNION 
SELECT [Column_name_1], [Column_name_2],…,[Column_name_n]
FROM tables_2
WHERE (yêu cầu/ điều kiện truy vấn nếu có)
)

2/ UNION và ORDER BY trong SQL
Sai
SELECT CustomerKey
FROM FactInternetSales
ORDER BY CustomerKey
UNION
SELECT CustomerKey
FROM DimCustomer
ORDER BY CustomerKey;
Đúng
SELECT CustomerKey
FROM FactInternetSales
UNION
SELECT CustomerKey
FROM DimCustomer
ORDER BY CustomerKey;

Lưu ý: Khi kết hợp UNION hay UNION ALL cùng với ORDER BY, chúng ta sẽ dùng mệnh đề ORDER BY ở câu SELECT cuối cùng nhé.

3/ SELECT INTO và UNION trong SQL
SELECT ProductModelID, Name
INTO dbo.ProductResults
FROM Production.ProductModel
WHERE ProductModelID NOT IN (3, 4)
UNION SELECT ProductModelID, Name
FROM dbo.Gloves;

Nội dung