PostgreSQL INTERSECT

17 Mar 2025 | 5 分钟阅读

在本节中,我们将了解 PostgreSQL Intersect 运算符的工作原理,该运算符用于合并多个命令的输出。

以及 PostgreSQL intersect 运算符示例,包括 单个,多个 表达式和 Order by 子句

什么是 PostgreSQL Intersect 运算符?

PostgreSQL 中, INTERSECT 运算符检索两个输出中都存在的任何行,就像 UNIONExcept 运算符一样。

换句话说,我们可以说 PostgreSQL intersect 运算符获取多个数据集的交集。

如果记录存在于两个数据集中,它将参与 INTERSECT 结果,并且每个数据集都由一个 SELECT 命令定义。 但是,如果记录仅存在于一个数据集中,而不存在于另一个数据集中,则它将从 INTERSECT 结果中消失。

下图表示由 INTERSECT 运算符产生的最终输出。

PostgreSQL INTERSECT

在上图中,蓝色区域显示了圆 P 和圆 Q 之间的交集。

INTERSECT 中的每个 SELECT 命令必须具有相似数量的具有相似数据类型的输出字段。

PostgreSQL Intersect 运算符的语法

PostgreSQL Intersect 运算符的示例如下

在上面的语法中,我们有以下参数,我们将在下表中讨论

参数描述
expression1, expression2, expression_n这些是我们想要检索的列或计算。
我们想要从中获取记录的表。
WHERE 条件这些是必须发生的条件,以便选择值。 这是一个可选参数。

注意:要使用 INTERSECT 运算符,出现在 SELECT 命令中的列必须遵循以下规则

  • 在两个 SELECT 子句中,必须有匹配的表达式或列数。
  • 等效的表达式在 SELECT 命令中必须具有相似的数据类型,例如,expression1 在第一个和第二个 SELECT 命令中必须具有相似的数据类型。

PostgreSQL INTERSECT 运算符的示例

为了理解 PostgreSQL intersect 运算符的工作原理,我们将采用在 PostgreSQL UNION 教程中创建的 top_rated_carsmost_reliable_cars

要查看来自 top_rated_cars 表的数据,我们将使用 SELECT 命令,如下面的命令所示

输出

执行上述命令后,我们将获得以下结果

PostgreSQL INTERSECT

以下命令返回来自 most_reliable_cars 表的数据

输出

在实现上述命令后,我们将获得以下输出

PostgreSQL INTERSECT
  • 具有单个表达式的 PostgreSQL Intersect 示例

在下面的示例中,我们将使用一个 INTERSECT 运算符,它包含一个具有相似数据类型的字段

输出

执行上述命令后,我们将获得以下输出

PostgreSQL INTERSECT

注意:在上面的示例中,如果 Car_name 同时出现在 top_rated_cars 和 most_reliable_cars 表中,它将出现在我们的输出中。

现在,如果我们要将 WHERE 子句添加到上面示例中的 INTERSECT 命令,它将是这样的

输出

在实现上述命令后,我们将获得以下输出,该输出显示了在使用 where 条件后检索到的那些相交值。

PostgreSQL INTERSECT

注意:在上面的示例中,WHERE 子句已添加到所有数据集。

  • 初始数据集已被过滤,因此仅返回 top_rated_cars 表中 launch_year 小于 2022 的记录。
  • 第二个数据集已被过滤;因此,仅返回 most_reliable_cars 表中 launch_year 等于 2020 的记录。

具有各种表达式的 PostgreSQL Intersect 示例

我们现在将看到一个示例,以了解 PostgreSQL INTERSECT 运算符如何使用多个列。

在下面的示例中,我们将使用 PostgreSQL 中的 INTERSECT 运算符来检索各种列。

为此,我们将从 Organization 数据库中获取 employeedepartment 表,该数据库是在 PostgreSQL 教程的早期部分中创建的。

输出

执行上述命令后,我们将获得以下输出,该输出显示了 employee 表中 address 和 phone 值与 department 表的 address 和 phone 值匹配的记录。

PostgreSQL INTERSECT

在上面的示例中,每个数据集上的 WHERE 条件都添加了过滤器输出;因此,仅返回 employee 表中 employee_name 不是 ross 的记录。

并且检索 department 表中 address 不是 London 的记录。

  • PostgreSQL INTERSECT 与 ORDER BY 子句

如果我们要对 INTERSECT 运算符的输出进行排序,我们将 ORDER BY 放置在查询列表的最后一个命令中。

PostgreSQL Intersect 与 ORDER BY 子句的语法

下面的示例用于表示带有 order by 子句的 PostgreSQL intersect

PostgreSQL intersects 与 Order by 子句的示例

在下面的示例中,我们使用与 employeedepartment 类似的表来了解带有 ORDER BY 子句的 INTERSECT 运算符的用法

输出

执行上述命令后,我们将获得以下结果集,该结果集显示了按 Address 以升序排序的结果,由 ORDER BY 1 表示。

并且 address 列字段位于输出中的#1的位置。

PostgreSQL INTERSECT

概述

在 PostgreSQL Intersect 部分中,我们学习了以下主题

  • 我们使用了 PostgreSQL Intersect 运算符来合并多个命令的输出。
  • 我们还了解了带有 单个和多个PostgreSQL intersect 运算符的工作原理
  • 我们还使用了带有 ORDER By 子句的 PostgreSQL Intersect 来对命令输出进行排序。

下一个主题PostgreSQL Except