📅  最后修改于: 2023-12-03 15:03:49.287000             🧑  作者: Mango
在PostgreSQL中,EXCEPT运算符用于从第一个查询结果中返回不在第二个查询结果中的所有行。
语法如下:
SELECT column1, column2, ..., columnN
FROM table1
EXCEPT
SELECT column1, column2, ..., columnN
FROM table2
在上面的语法中,两个查询中具有相同名称和数据类型的列必须具有相同的数量。
假设有以下两个表格:
students:
| id | name | | -- | ------ | | 1 | Alice | | 2 | Bob | | 3 | Carol | | 4 | David | | 5 | Elaine |
enrolled:
| id | student_id | course | | -- | ----------|--------| | 1 | 1 | Math | | 2 | 2 | Science| | 3 | 3 | English| | 4 | 4 | Math | | 5 | 3 | Science| | 6 | 2 | English| | 7 | 5 | Math | | 8 | 1 | Science|
现在,我们可以使用EXCEPT运算符来找出没有注册英语课程的学生:
SELECT id, name
FROM students
EXCEPT
SELECT student_id, NULL
FROM enrolled
WHERE course = 'English'
输出结果:
| id | name | | -- | ------ | | 1 | Alice | | 4 | David | | 5 | Elaine |
在上面的示例中,使用了EXCEPT运算符来获取所有在“学生”表格中注册但未注册到“英语”课程的学生。 它将两个查询结果相减,并返回不在第二个查询结果中的所有行。