Từ khóa UNION trong MySQL

Bạn có thể sử dụng từ khóa UNION nếu bạn muốn lựa chọn các hàng (hàng này sau hàng kia) từ các bảng hoặc một số tập hợp các hàng từ một bảng đơn dưới dạng một tập kết quả đơn.

UNION là có sẵn với MySQL 4.0. Chương này minh họa cách sử dụng nó.

Giả sử bạn có 2 bảng: bảng nhanvienIT liệt kê các nhân viên IT chuyên sản xuất phần mềm và một bảng nhanvienBH chuyên bán các sản phẩm phần mềm, và một bảng thứ ba liệt kê chi nhánh của công ty bạn, và bạn muốn tạo một danh sách để liệt kê tất cả địa chỉ của nhân viên chẳng hạn. UNION cung cấp một cách để thực hiện điều này. Giả sử 3 bảng có nội dung sau:

//bang nhanvienIT co cac ban ghi sau:
mysql> SELECT * FROM nhanvienIT;
+--------------+-------+-----------------+
| ho           | ten   |   diachi        |
+--------------+-------+-----------------+
| Nguyen Van   | Hoang |    Dong Da      |
| Hoang Thanh  | Tung  |    Ba Dinh      |
+--------------+-------+-----------------+

//bang nhanvienBH co cac ban ghi sau:
mysql> SELECT * FROM nhanvienBH;
+--------+------------+--------------+
| fname  | lname      |    addr      |
+--------+------------+--------------+
| Huong  | Tran Thi   | Kim Lien     |
| Thanh  | Nguyen Ba  | Cau Giay     |
| Tung   | Do Manh    | Hoang Mai    |
+--------+------------+--------------+

//bang chinhanhlamviec co cac ban ghi sau
mysql> SELECT * FROM chinhanhlamviec;
+-----------+--------------+
| chinhanh  |   diachi     |
+-----------+--------------+
| Kim Lien  | 234 Xa Dan   |
| Cau Giay  | 556 Cau Giay |
+-----------+--------------+

Việc 3 bảng có tên các cột khác nhau không là vấn đề gì. Truy vấn sau minh họa cách chọn tendiachi từ 3 bảng cùng môt lúc:

SELECT ho, ten, diachi FROM nhanvienIT
 UNION
 SELECT lname, fname, addr FROM nhanvienBH
 UNION
 SELECT chinhanh, '', diachi FROM chinhanhlamviec;

Kết quả là:

Nếu bạn muốn lựa chọn tất cả bản ghi, bao gồm các bản sao, bạn sử dụng thêm ALL sau UNION:

SELECT ho, ten, diachi FROM nhanvienIT
 UNION ALL
 SELECT lname, fname, addr FROM nhanvienBH
 UNION
 SELECT chinhanh, '', diachi FROM chinhanhlamviec;

Last updated