SQL |除外条款
在 SQL 中,EXCEPT 返回由第一个 SELECT 操作返回的那些元组,而不是由第二个 SELECT 操作返回的那些元组。
这与在关系代数中使用减法运算符相同。
例子:
假设我们有两个关系,学生和 TA(助教)。我们希望返回所有不是助教的学生。查询可以表述为:
学生表:
StudentID | Name | Course |
---|---|---|
1 | Rohan | DBMS |
2 | Kevin | OS |
3 | Mansi | DBMS |
4 | Mansi | ADA |
5 | Rekha | ADA |
6 | Megha | OS |
StudentID | Name | Course TA Table: |
---|---|---|
1 | Kevin | TOC |
2 | Sita | IP |
3 | Manik | AP |
4 | Rekha | SNS |
SELECT Name
FROM Students
EXCEPT
SELECT NAME
FROM TA;
输出:
Rohan
Mansi
Megha
要保留重复项,我们必须显式编写EXCEPTALL而不是 EXCEPT。
SELECT Name
FROM Students
EXCEPTALL
SELECT Name
FROM TA;
输出:
Rohan
Mansi
Mansi
Megha
EXCEPT 和 NOT IN 子句之间的区别
EXCEPT 自动删除最终结果中的所有重复项,而 NOT IN 保留重复的元组。同样重要的是要注意 MySQL 不支持 EXCEPT。