PostgreSQL 教程: EXCEPT 取差集

八月 30, 2023

摘要:在本教程中,您将学习如何使用 PostgreSQL 的EXCEPT运算符,返回第一个查询中未出现在第二个查询的输出中的行。

PostgreSQL EXCEPT 运算符简介

UNIONINTERSECT 运算符类似,EXCEPT运算符通过比较两个或多个查询的结果集来返回行。

EXCEPT运算符返回第一个(左)查询中不在第二个(右)查询的输出中的不同行。

下面说明了EXCEPT运算符的语法。

SELECT select_list
FROM A
EXCEPT
SELECT select_list
FROM B;

EXCEPT涉及到的查询需要遵循以下规则:

  • 两个查询中的列数及其顺序必须相同。
  • 各列的数据类型必须兼容。

下面的维恩图说明了EXCEPT运算符:

PostgreSQL EXCEPT

PostgreSQL EXCEPT 运算符示例

我们将使用 UNION 教程中创建的top_rated_filmsmost_popular_films表:

top_rated_films表:

img

most_popular_films表:

img

以下语句使用EXCEPT运算符查找评分最高但不受欢迎的电影:

SELECT * FROM top_rated_films
EXCEPT 
SELECT * FROM most_popular_films;

img

以下语句使用查询中的ORDER BY子句对EXCEPT运算符返回的结果集进行排序:

SELECT * FROM top_rated_films
EXCEPT
SELECT * FROM most_popular_films
ORDER BY title;

请注意,我们将 ORDER BY 子句放在语句末尾,以按标题对电影进行排序。

概括

  • 使用 PostgreSQL 的EXCEPT运算符获取第一个查询中未出现在第二个查询的结果集中的行。