EXCEPT
是 SQL 中的一个集合操作符,用于从第一个查询的结果集中排除第二个查询的结果集。换句话说,它返回第一个查询中存在但在第二个查询中不存在的记录。EXCEPT
操作符的行为类似于数学中的集合差运算。
语法
SELECT column_list FROM table1 EXCEPT SELECT column_list FROM table2;
column_list
是要在两个查询中进行比较的列名列表。这些列的数量和数据类型必须相同。table1
和table2
是你要从中选择数据的表。
示例
假设我们有两张表 students_2023
和 students_2024
,每张表都有一列 student_id
,表示学生的唯一标识符。现在,我们想找出在 2023 年还在校但在 2024 年不再在校的学生。
SELECT student_id FROM students_2023 EXCEPT SELECT student_id FROM students_2024;
解释:
SELECT student_id FROM students_2023
: 获取 2023 年在校的所有学生 ID。EXCEPT
: 排除在第二个查询中存在的记录。SELECT student_id FROM students_2024
: 获取 2024 年在校的所有学生 ID。
这个查询的结果将是只存在于 students_2023
表而不在 students_2024
表中的 student_id
。
注意事项
-
列数量和类型必须相同:
EXCEPT
操作符要求两个查询的结果集有相同数量的列,并且相应列的数据类型必须兼容。 -
去重:
EXCEPT
会默认去除重复的行。如果你想要保留重复的行,可以使用EXCEPT ALL
。 -
顺序:
EXCEPT
的顺序很重要,它只会排除第二个查询中存在的记录,反之不成立。
使用场景
- 查找缺失数据:你可以使用
EXCEPT
来查找在一个表中存在而另一个表中缺失的数据。 - 数据验证:
EXCEPT
可用于比较两个结果集,验证它们是否相同或找出其中的差异。