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ử UNIONUNION 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ả

ThanhphoFromTable
An GiangCustomers
Bà Rịa - Vũng TàuCustomers
Bình DươngCustomers
Bình PhướcCustomers
......

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 Thanhpho
Chạy thử

Đăng ký nhận bài viết mới