Mệnh đề EXCEPT trong SQL
Mệnh đề/Toán tử EXCEPT trong SQL được sử dụng để kết hợp hai lệnh SELECT và trả về các hàng từ lệnh SELECT đầu tiên mà không được trả về bởi lệnh SELECT thứ hai. Nghĩa là, mệnh đề EXCEPT chỉ trả về các hàng, mà không có sẵn trong lệnh SELECT thứ hai.
Các qui tắc áp dụng cho toán tử UNION cũng áp dụng cho toán tử EXCEPT. MySQL không hỗ trợ toán tử EXCEPT.
Cú pháp
Cú pháp cơ bản của EXCEPT trong SQL như sau:
SELECT cot1 [, cot2 ] FROM bang1 [, bang2 ] [WHERE dieu_kien] EXCEPT SELECT cot1 [, cot2 ] FROM bang1 [, bang2 ] [WHERE dieu_kien]
Ở đây, dieu_kien đã cho có thể là bất kỳ biểu thức nào 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ờ, chúng ta kết hợp hai bảng bởi sử dụng các lệnh SELECT trong SQL như sau:
SQL> SELECT ID, TEN, SOTIEN, NGAY FROM SINHVIEN LEFT JOIN MUONSACH ON SINHVIEN.ID = MUONSACH.SINHVIEN_ID EXCEPT 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 | | 5 | Huong | NULL | NULL | +----+---------+--------+---------------------+