PostgreSQL 教程: INTERSECT 取交集

八月 31, 2023

摘要:在本教程中,您将学习如何使用 PostgreSQL 的INTERSECT运算符组合两个或多个查询的结果集。

PostgreSQL INTERSECT 运算符简介

UNIONEXCEPT 运算符类似,PostgreSQL 的INTERSECT运算符将两个或多个 SELECT 语句的结果集组合成一个结果集。

INTERSECT运算符返回两个结果集中可用的任何行。

下图显示了INTERSECT运算符产生的最终结果集。

PostgreSQL INTERSECT Operator

最终结果集由圆 A 与圆 B 相交的黄色区域表示。

下面说明了INTERSECT运算符的语法:

SELECT select_list
FROM A
INTERSECT
SELECT select_list
FROM B;

要使用INTERSECT运算符,SELECT语句中出现的列必须遵循以下规则:

  1. SELECT列表中的列数及其顺序必须相同。
  2. 列的数据类型必须兼容。

带 ORDER BY 子句的 INTERSECT 操作

如果要对INTERSECT运算符返回的结果集进行排序,请将ORDER BY放在查询列表中的最终查询处,如下所示:

SELECT select_list
FROM A
INTERSECT
SELECT select_list
FROM B
ORDER BY sort_expression;

PostgreSQL INTERSECT 运算符示例

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

top_rated_films表:

img

most_popular_films表:

img

要获取热门的同时也是评分最高的电影,您可以使用INTERSECT运算符,如下:

SELECT *
FROM most_popular_films 
INTERSECT
SELECT *
FROM top_rated_films;

img

结果集返回了同时出现在两个表中的一部影片。

在本教程中,您学习了如何使用 PostgreSQL 的INTERSECT运算符组合多个查询返回的结果集。