Kết hợp dữ liệu UNION
Đôi khi, bạn có thể cần kết hợp dữ liệu mà chúng có cấu trúc giống nhau từ nhiều bảng thành một khi truy vấn. Các bảng này có khi trong cùng một CSDL, có khi ở các CSDL khác nhau, thậm chí là ở các server khác nhau.
Thực hiện nhiệm vụ này có toán tử UNION và UNION ALL
- UNION kết hợp lại nhưng loại bỏ trùng nhau
- UNION ALL kết hợp lại nhưng không loại bỏ trùng nhau
UNION dùng để kết hợp các kết quả của các câu SELECT lại với nhau. Các câu SELECT cần có số cột giống nhau, cột tương ứng theo thứ tự phải cùng kiểu dữ liệu
Ví dụ lấy tên từ bảng Customers và Suppliers có loại bỏ tên trùng nhau (giữ lại duy nhất 1)
SELECT Thanhpho, 'Customers' as FromTable FROM Khachhang UNION SELECT Thanhpho, 'Suppliers' as FromTable FROM Cungcap ORDER BY Thanhpho
Kết quả
Thanhpho | FromTable |
---|---|
An Giang | Customers |
Bà Rịa - Vũng Tàu | Customers |
Bình Dương | Customers |
Bình Phước | Customers |
... | ... |
Có một file CSDL mẫu dạng SQLite, bạn có thể tải về thực hành: CSDL SQLite mẫu. Hoặc Chạy SQL Online
Trong trường hợp kết hợp mà không muốn loại bỏ trùng nhau thì dùng UNION ALL
SELECT Thanhpho, 'Customers' as FromTable FROM Khachhang UNION ALL SELECT Thanhpho, 'Suppliers' as FromTable FROM Cungcap ORDER BY Thanhpho
Trong câu lệnh SELECT sử dụng UNION có thể sử dụng WHERE
Ví dụ lấy tất cả tên các thành phố từ Germany
SELECT Thanhpho, 'Customers' as FromTable FROM Khachhang WHERE Quocgia='Việt Nam' UNION SELECT Thanhpho, 'Suppliers' as FromTable FROM Cungcap WHERE Quocgia='Việt Nam' ORDER BY ThanhphoChạy thử