Cách Sử Dụng UNION Để Kết Hợp Kết Quả Của Nhiều Truy Vấn?
Trong SQL, UNION là một công cụ mạnh mẽ cho phép bạn kết hợp kết quả từ nhiều truy vấn thành một tập kết quả duy nhất. Điều này đặc biệt hữu ích khi bạn muốn truy xuất dữ liệu từ nhiều bảng khác nhau hoặc từ các truy vấn khác nhau mà vẫn trả về một tập hợp kết quả duy nhất. Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết về cách sử dụng UNION, các trường hợp ứng dụng cụ thể, và các điều kiện cần lưu ý khi sử dụng.
1. UNION là gì?
1.1. Khái Niệm
UNION được sử dụng để kết hợp kết quả của hai hoặc nhiều truy vấn SELECT. Nó loại bỏ các hàng trùng lặp, chỉ giữ lại các giá trị duy nhất trong kết quả. Nếu bạn muốn giữ lại các hàng trùng lặp, bạn có thể sử dụng UNION ALL.
1.2. Điều Kiện Sử Dụng
Số lượng cột và thứ tự của các cột trong các truy vấn phải giống nhau.
Các cột tương ứng phải có kiểu dữ liệu tương thích (ví dụ: nếu cột thứ nhất là kiểu số trong truy vấn đầu tiên, nó cũng phải là kiểu số trong truy vấn thứ hai).
2. Cú Pháp UNION
2.1. Cú Pháp Cơ Bản
SELECT column1, column2, ...
FROM table1
UNION
SELECT column1, column2, ...
FROM table2;
2.2. Cú Pháp UNION ALL
Nếu bạn muốn giữ lại các hàng trùng lặp trong kết quả, bạn có thể sử dụng UNION ALL thay vì UNION:
SELECT column1, column2, ...
FROM table1
UNION ALL
SELECT column1, column2, ...
FROM table2;
3. Ví Dụ Minh Họa
3.1. Ví Dụ Về UNION
Giả sử bạn có hai bảng: CustomersUSA (khách hàng tại Mỹ) và CustomersUK (khách hàng tại Anh).
CustomersUSA
CustomerID
Name
1
Alice
2
Bob
CustomersUK
CustomerID
Name
3
Charlie
4
David
Bạn muốn lấy danh sách khách hàng từ cả hai bảng mà không có sự trùng lặp, bạn có thể sử dụng UNION như sau:
SELECT CustomerID, Name
FROM CustomersUSA
UNION
SELECT CustomerID, Name
FROM CustomersUK;
Kết quả:
CustomerID
Name
1
Alice
2
Bob
3
Charlie
4
David
Kết quả sẽ trả về toàn bộ khách hàng từ cả hai bảng và loại bỏ các hàng trùng lặp (nếu có).
3.2. Ví Dụ Về UNION ALL
Nếu bạn muốn giữ lại các hàng trùng lặp giữa hai bảng, bạn có thể sử dụng UNION ALL. Giả sử có khách hàng trùng lặp ở cả hai bảng.
CustomersUSA
CustomerID
Name
1
Alice
2
Bob
CustomersUK
CustomerID
Name
2
Bob
3
Charlie
Câu truy vấn sau sẽ kết hợp dữ liệu từ hai bảng và giữ lại tất cả các hàng trùng lặp:
SELECT CustomerID, Name
FROM CustomersUSA
UNION ALL
SELECT CustomerID, Name
FROM CustomersUK;
Kết quả:
CustomerID
Name
1
Alice
2
Bob
2
Bob
3
Charlie
Trong trường hợp này, bạn sẽ thấy có hai hàng trùng lặp về khách hàng Bob vì UNION ALL không loại bỏ các hàng trùng lặp.
4. Ứng Dụng UNION Trong Các Tình Huống Thực Tế
4.1. Kết Hợp Dữ Liệu Từ Nhiều Bảng
Khi bạn có nhiều bảng lưu trữ dữ liệu tương tự (ví dụ: các bảng lưu thông tin khách hàng từ các quốc gia khác nhau), UNION là cách tốt để kết hợp dữ liệu từ các bảng này thành một kết quả duy nhất.
Ví dụ, bạn có các bảng Customers2019 và Customers2020 lưu trữ khách hàng theo từng năm. Để lấy danh sách khách hàng từ cả hai bảng, bạn có thể dùng UNION:
SELECT CustomerID, Name
FROM Customers2019
UNION
SELECT CustomerID, Name
FROM Customers2020;
4.2. Kết Hợp Dữ Liệu Từ Nhiều Truy Vấn Khác Nhau
UNION cũng có thể được sử dụng để kết hợp kết quả từ nhiều truy vấn khác nhau. Ví dụ, bạn muốn lấy tất cả các sản phẩm đã bán tại cả cửa hàng và trực tuyến:
SELECT ProductID, ProductName
FROM StoreSales
UNION
SELECT ProductID, ProductName
FROM OnlineSales;
Kết quả sẽ bao gồm danh sách tất cả các sản phẩm đã bán tại cả cửa hàng và trực tuyến, loại bỏ các sản phẩm trùng lặp.
4.3. Kết Hợp Dữ Liệu Khi Kiểu Dữ Liệu Không Trùng Khớp
Trường hợp bạn cần kết hợp dữ liệu từ hai truy vấn nhưng kiểu dữ liệu không hoàn toàn giống nhau, bạn có thể cần sử dụng các hàm chuyển đổi dữ liệu. Ví dụ, nếu một bảng lưu trữ ngày dưới dạng DATE và bảng khác lưu dưới dạng VARCHAR, bạn cần chuyển đổi chúng về cùng một kiểu dữ liệu:
SELECT CustomerID, CAST(OrderDate AS VARCHAR) AS Date
FROM Orders2019
UNION
SELECT CustomerID, OrderDate
FROM Orders2020;
Trong ví dụ trên, cột OrderDate từ bảng Orders2019 được chuyển sang kiểu VARCHAR để tương thích với cột OrderDate của bảng Orders2020.
5. Lưu Ý Khi Sử Dụng UNION
UNION tự động loại bỏ các hàng trùng lặp, do đó có thể làm giảm hiệu suất khi xử lý lượng dữ liệu lớn. Nếu bạn không cần loại bỏ các hàng trùng lặp, hãy sử dụng UNION ALL để cải thiện hiệu suất.
Các cột trong truy vấn phải có cùng số lượng và kiểu dữ liệu tương thích.
Sắp xếp thứ tự kết quả bằng ORDER BY chỉ có thể được sử dụng một lần sau cùng tất cả các phép UNION:
SELECT column1, column2
FROM table1
UNION
SELECT column1, column2
FROM table2
ORDER BY column1;
6. Kết Luận
UNION là một công cụ mạnh mẽ giúp bạn kết hợp dữ liệu từ nhiều truy vấn thành một tập kết quả duy nhất. Tuy nhiên, bạn cần phải hiểu rõ cách sử dụng để đảm bảo tính nhất quán của dữ liệu và tối ưu hóa hiệu suất. Hãy sử dụng UNION khi bạn cần loại bỏ các hàng trùng lặp và UNION ALL khi bạn muốn giữ lại tất cả các hàng, bao gồm cả những hàng trùng lặp. Việc nắm vững kỹ thuật này sẽ giúp bạn xử lý dữ liệu trong SQL hiệu quả hơn.
This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.
Strictly Necessary Cookies
Strictly Necessary Cookie should be enabled at all times so that we can save your preferences for cookie settings.
If you disable this cookie, we will not be able to save your preferences. This means that every time you visit this website you will need to enable or disable cookies again.