Toán tử MySQL UNION
Toán tử MySQL UNION
Toán tử UNION
được sử dụng để kết hợp tập kết quả của hai hoặc nhiều câu lệnh SELECT
.
- Mọi câu lệnh
SELECT
trongUNION
phải có cùng số cột - Các cột cũng phải có kiểu dữ liệu tương tự
- Các cột trong mỗi câu lệnh
SELECT
cũng phải có cùng thứ tự
Cú pháp ĐOÀN
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2 ;
UNION TẤT CẢ Cú pháp
Toán tử UNION
chỉ chọn các giá trị riêng biệt theo mặc định. Để cho phép các giá trị trùng lặp, hãy sử dụng UNION ALL
:
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2 ;
Lưu ý: Tên cột trong tập kết quả thường bằng tên cột trong câu lệnh SELECT
đầu tiên.
Cơ sở dữ liệu demo
Trong hướng dẫn này, chúng tôi sẽ sử dụng cơ sở dữ liệu mẫu Northwind nổi tiếng.
Dưới đây là lựa chọn từ bảng "Khách hàng":
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 |
Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
Và một lựa chọn từ bảng "Nhà cung cấp":
SupplierID | SupplierName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Exotic Liquid | Charlotte Cooper | 49 Gilbert St. | London | EC1 4SD | UK |
2 | New Orleans Cajun Delights | Shelley Burke | P.O. Box 78934 | New Orleans | 70117 | USA |
3 | Grandma Kelly's Homestead | Regina Murphy | 707 Oxford Rd. | Ann Arbor | 48104 | USA |
Ví dụ về ĐOÀN SQL
Câu lệnh SQL sau đây trả về các thành phố (chỉ các giá trị riêng biệt) từ cả bảng "Khách hàng" và "Nhà cung cấp":
Lưu ý: Nếu một số khách hàng hoặc nhà cung cấp có cùng thành phố thì mỗi thành phố sẽ chỉ được liệt kê một lần vì UNION
chỉ chọn các giá trị riêng biệt. Sử dụng UNION ALL
để chọn các giá trị trùng lặp!
SQL UNION TẤT CẢ Ví dụ
Câu lệnh SQL sau đây trả về các thành phố (cũng có giá trị trùng lặp) từ cả bảng "Khách hàng" và "Nhà cung cấp":
Ví dụ
SELECT City FROM Customers
UNION ALL
SELECT City FROM Suppliers
ORDER BY City;
Hãy tự mình thử »ĐOÀN SQL Với WHERE
Câu lệnh SQL sau đây trả về các thành phố của Đức (chỉ các giá trị riêng biệt) từ cả bảng "Khách hàng" và "Nhà cung cấp":
Ví dụ
SELECT City, Country FROM Customers
WHERE Country='Germany'
UNION
SELECT City, Country FROM Suppliers
WHERE Country='Germany'
ORDER BY City;
Hãy tự mình thử »SQL UNION TẤT CẢ Với WHERE
Câu lệnh SQL sau đây trả về các thành phố của Đức (cũng có các giá trị trùng lặp) từ cả bảng "Khách hàng" và "Nhà cung cấp":
Ví dụ
SELECT City, Country FROM Customers
WHERE Country='Germany'
UNION ALL
SELECT City, Country FROM Suppliers
WHERE Country='Germany'
ORDER BY City;
Hãy tự mình thử »Một ví dụ khác của UNION
Câu lệnh SQL sau liệt kê tất cả khách hàng và nhà cung cấp:
Ví dụ
SELECT 'Customer' AS Type, ContactName, City, Country
FROM Customers
UNION
SELECT 'Supplier', ContactName, City, Country
FROM Suppliers;
Hãy tự mình thử »Lưu ý "Loại AS" ở trên - đó là bí danh. Bí danh SQL được sử dụng để đặt tên tạm thời cho bảng hoặc cột. Bí danh chỉ tồn tại trong suốt thời gian truy vấn. Vì vậy, ở đây chúng tôi đã tạo một cột tạm thời có tên "Loại", liệt kê người liên hệ là "Khách hàng" hay "Nhà cung cấp".