Mệnh đề INTERSECT hoạt động ngược hoàn toàn so với INTERSECT. Mệnh đề 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.
Except trong SQL
Cú pháp
SELECT bieu_thuc1, bieu_thuc2, … bieu_thucn FROM bang [WHERE dieu_kien] EXCEPT SELECT bieu_thuc1, bieu_thuc2, … bieu_thucn FROM bang [WHERE dieu_kien];
Tên biến hoặc giá trị biến
bieu_thuc
Cột hoặc giá trị mà bạn muốn so sánh giữa 2 lệnh SELECT. Chúng không nhất thiết phải nằm trong cùng 1 trường thông tin ở mỗi lệnh SELECT nhưng các cột tương ứng phải có dữ liệu giống nhau.
bang
Bảng muốn lấy dữ liệu từ đó. Phải có ít nhất 1 bảng trong mệnh đề FROM.
WHERE dieu_kien
Các điều kiện trên dữ liệu được SELECT.
Lưu ý:
- Hai lệnh SELECT phải có cùng số cột
- Mỗi cặp đôi một trong 2 mệnh đề SELECT phải cùng kiểu dữ liệu
- Toán tử EXCEPT trả về tất cả bản ghi từ lệnh SELECT đầu tiên và không nằm trong lệnh SELECT thứ 2.
Bảng CUSTOMERS
+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Ramesh | 32 | Ahmedabad | 2000.00 | | 2 | Khilan | 25 | Delhi | 1500.00 | | 3 | kaushik | 23 | Kota | 2000.00 | | 4 | Chaitali | 25 | Mumbai | 6500.00 | | 5 | Hardik | 27 | Bhopal | 8500.00 | | 6 | Komal | 22 | MP | 4500.00 | | 7 | Muffy | 24 | Indore | 10000.00 | +----+----------+-----+-----------+----------+
Bảng ORDERS
+-----+---------------------+-------------+--------+ |OID | DATE | CUSTOMER_ID | AMOUNT | +-----+---------------------+-------------+--------+ | 102 | 2009-10-08 00:00:00 | 3 | 3000 | | 100 | 2009-10-08 00:00:00 | 3 | 1500 | | 101 | 2009-11-20 00:00:00 | 2 | 1560 | | 103 | 2008-05-20 00:00:00 | 4 | 2060 | +-----+---------------------+-------------+--------+
Bây giờ, chúng ta hãy nối hai bảng này trong câu lệnh SELECT như hình dưới đây.
SQL> SELECT ID, NAME, AMOUNT, DATE FROM CUSTOMERS LEFT JOIN ORDERS ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID EXCEPT SELECT ID, NAME, AMOUNT, DATE FROM CUSTOMERS RIGHT JOIN ORDERS ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;
Kết quả sẽ là
+----+---------+--------+---------------------+ | ID | NAME | AMOUNT | DATE | +----+---------+--------+---------------------+ | 1 | Ramesh | NULL | NULL | | 5 | Hardik | NULL | NULL | | 6 | Komal | NULL | NULL | | 7 | Muffy | NULL | NULL | +----+---------+--------+---------------------+
Nguồn tham khảo