Mệnh đề/Toán tử UNION trong SQL được sử dụng để kết hợp kết quả của hai hoặc nhiều lệnh SELECT mà không trả về bất cứ bản sao nào của bản ghi.
Để sử dụng UNION, mỗi lệnh SELECT phải có cùng số cột đã chọn, cùng số biểu thức của các cột, cùng kiểu dữ liệu, và chúng có cùng thứ tự, nhưng chúng không cần phải có cùng độ dài.
Cú pháp cơ bản của mệnh đề UNION trong SQL như sau:
SELECT cot1 [, cot2 ]
FROM bang1 [, bang2 ]
[WHERE dieu_kien]
UNION
SELECT cot1 [, cot2 ]
FROM bang1 [, bang2 ]
[WHERE dieu_kien]
```Tại đây, dieu\_kien đã cho có thể là bất kỳ biểu thức nào dựa theo yêu cầu của bạn.
Ví dụ
-----
Giả sử có hai bảng, bảng SINHVIEN có các bản ghi sau:
+----+---------+-----+-----------+--------+ | ID | TEN | TUOI| KHOAHOC | HOCPHI | +----+---------+-----+-----------+---------+ | 1 | Hoang | 21 | CNTT | 4000000 | | 2 | Viet | 19 | DTVT | 3000000 | | 3 | Thanh | 18 | KTDN | 4000000 | | 4 | Nhan | 19 | CK | 4500000 | | 5 | Huong | 20 | TCNH | 5000000 | +----+---------+-----+-----------+---------+
```Bảng MUONSACH có các bản ghi sau:
+-----+---------------------+-------------+--------+
|STT | NGAY | SINHVIEN_ID | SOTIEN |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 | 3 | 320 |
| 100 | 2009-10-08 00:00:00 | 3 | 250 |
| 101 | 2009-11-20 00:00:00 | 2 | 280 |
| 103 | 2008-05-20 00:00:00 | 4 | 290 |
+-----+---------------------+-------------+--------+
```Bây giờ, kết hợp hai bảng này trong lệnh SELECT như sau:
SQL> SELECT ID, TEN, SOTIEN, NGAY FROM SINHVIEN LEFT JOIN MUONSACH ON SINHVIEN.ID = MUONSACH.SINHVIEN_ID UNION SELECT ID, TEN, SOTIEN, NGAY FROM SINHVIEN RIGHT JOIN MUONSACH ON SINHVIEN.ID = MUONSACH.SINHVIEN_ID;
```Ví dụ trên sẽ cho kết quả:
+------+----------+--------+---------------------+
| ID | TEN | SOTIEN | NGAY |
+------+----------+--------+---------------------+
| 1 | Hoang | NULL | NULL |
| 2 | Viet | 280 | 2009-11-20 00:00:00 |
| 3 | Thanh | 320 | 2009-10-08 00:00:00 |
| 3 | Thanh | 250 | 2009-10-08 00:00:00 |
| 4 | Nhan | 290 | 2008-05-20 00:00:00 |
| 5 | Huong | NULL | NULL |
+------+----------+--------+---------------------+
```Mệnh đề UNION ALL trong SQL
---------------------------
Toán tử UNION ALL được sử dụng để kết hợp nhiều kết quả của hai lệnh SELECT bao gồm cả các bản sao của các hàng.
Các qui tắc áp dụng cho UNION cũng áp dụng cho toán tử UNION ALL.
Cú pháp
-------
Cú pháp cơ bản của **UNION ALL** là như sau:
SELECT cot1 [, cot2 ] FROM bang1 [, bang2 ] [WHERE dieu_kien]
UNION ALL
SELECT cot1 [, cot2 ] FROM bang1 [, bang2 ] [WHERE dieu_kien]
```Ở đây, dieu_kien đã cho có thể là bất kỳ biểu thức đã cung cấp nào dựa theo yêu cầu của bạn.
Giả sử có hai bảng, bảng SINHVIEN có các bản ghi sau:
+----+---------+-----+-----------+--------+
| ID | TEN | TUOI| KHOAHOC | HOCPHI |
+----+---------+-----+-----------+---------+
| 1 | Hoang | 21 | CNTT | 4000000 |
| 2 | Viet | 19 | DTVT | 3000000 |
| 3 | Thanh | 18 | KTDN | 4000000 |
| 4 | Nhan | 19 | CK | 4500000 |
| 5 | Huong | 20 | TCNH | 5000000 |
+----+---------+-----+-----------+---------+
```Bảng MUONSACH có các bản ghi sau:
+-----+---------------------+-------------+--------+ |STT | NGAY | SINHVIEN_ID | SOTIEN | +-----+---------------------+-------------+--------+ | 102 | 2009-10-08 00:00:00 | 3 | 320 | | 100 | 2009-10-08 00:00:00 | 3 | 250 | | 101 | 2009-11-20 00:00:00 | 2 | 280 | | 103 | 2008-05-20 00:00:00 | 4 | 290 | +-----+---------------------+-------------+--------+
```Bây giờ, kết hợp hai bảng trên trong lệnh SELECT như sau:
SQL> SELECT ID, TEN, SOTIEN, NGAY
FROM SINHVIEN
LEFT JOIN MUONSACH
ON SINHVIEN.ID = MUONSACH.SINHVIEN_ID
UNION ALL
SELECT ID, TEN, SOTIEN, NGAY
FROM SINHVIEN
RIGHT JOIN MUONSACH
ON SINHVIEN.ID = MUONSACH.SINHVIEN_ID;
```Ví dụ trên sẽ cho kết quả:
+------+----------+--------+---------------------+ | ID | TEN | SOTIEN | NGAY | +------+----------+--------+---------------------+ | 1 | Hoang | NULL | NULL | | 2 | Viet | 280 | 2009-11-20 00:00:00 | | 3 | Thanh | 320 | 2009-10-08 00:00:00 | | 3 | Thanh | 250 | 2009-10-08 00:00:00 | | 4 | Nhan | 290 | 2008-05-20 00:00:00 | | 5 | Huong | NULL | NULL | | 3 | Thanh | 320 | 2009-10-08 00:00:00 | | 3 | Thanh | 250 | 2009-10-08 00:00:00 | | 2 | Viet | 280 | 2009-11-20 00:00:00 | | 4 | Nhan | 290 | 2008-05-20 00:00:00 | +------+----------+--------+---------------------+
```Ngoài ra, có hai mệnh đề khác (hoặc toán tử) mà khá tương tự như mệnh đề UNION, bạn truy cập link để tìm hiểu chúng:
Các loạt bài khác:
-
Unpublished comment
Viết câu trả lời