PostgreSQL EXCEPT

17 Mar 2025 | 4 分钟阅读

在本节中,我们将了解 PostgreSQL EXCEPT 运算符的工作原理,该运算符用于返回初始命令中未出现在第二个命令输出中的行。

以及 PostgreSQL Except 运算符单表达式和多表达式 以及 order by 子句示例

什么是 PostgreSQL Except 运算符?

PostgreSQL 中,EXCEPT 运算符用于通过比较两个或多个命令的输出来检索行,就像 UNION 和 INTERSECT 运算符一样。

换句话说,我们可以说 PostgreSQL EXCEPT 运算符从 左侧(第一个 SELECT)命令检索不同的行,这些行不在 右侧(第二个 SELECT)命令的结果集中。并且所有 SELECT 命令 将定义一个数据集。

EXCEPT 运算符将返回初始数据集中的所有记录,然后删除第二个数据集中的所有值。

下图表示由 EXCEPT 运算符生成的最终输出。

PostgreSQL EXCEPT

在上图中,芥末黄区域表示执行 EXCEPT 命令后检索到的记录。这些记录存在于 圆圈 P 中,而不存在于 圆圈 Q 中。

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

PostgreSQL EXCEPT 运算符的语法

PostgreSQL except 运算符的示例如下

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

参数描述
expression1, expression2, expression_n这些是我们要比较两个 SELECT 命令之间的列或计算。
它们不需要是每个 SELECT 命令中的匹配字段,而等效列必须包含等效的数据类型。
这些是我们想要从中获取记录的表。
WHERE 条件这些是必须满足的对值进行排序的条件。它是一个可选参数。

PostgreSQL Except 运算符的示例

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

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

输出

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

PostgreSQL EXCEPT

以下命令从 most_reliable_cars 表返回数据

输出

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

PostgreSQL EXCEPT
  • 带有单表达式的 PostgreSQL EXCEPT 示例

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

输出

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

PostgreSQL EXCEPT

在上面的示例中,EXCEPT 运算符检索 top_rated_cars 表中存在而在 most_reliable_cars 表中不存在的所有 car_name 值。

这意味着如果 car_name 值存在于 top_rated_cars 表中,并且也存在于 most_reliable_cars 表中,则 car_name 值将不会出现在 EXCEPT 命令输出中。

带有各种表达式的 PostgreSQL Except 示例

我们现在将看到一个示例,以了解 PostgreSQL Except 运算符在使用多个列时的运行方式。

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

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

输出

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

PostgreSQL EXCEPT

在上面的示例中,Except 运算符命令将检索 address、phone 值与 department 表的 address 和 phone值不匹配的 employee 表的值。

  • 带有 ORDER BY 子句的 PostgreSQL Except

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

带有 ORDER BY 子句的 PostgreSQL Except 的语法

以下示例用于表示带有 order by 子句的 PostgreSQL Except

带有 Order by 子句的 PostgreSQL EXCEPT 示例

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

输出

执行上述命令后,我们将获得以下结果集,该结果集显示了由 ORDER BY Car_name 表示的按升序排序的 top_rated_cars。并且 Car_name 列字段在输出中的 #1 位置。

PostgreSQL EXCEPT

在上面的示例中,随后,两个 SELECT 命令之间的列名不相似。

通过它们在输出中的位置来引用 ORDER BY 子句中的列更有利。

概述

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

  • 我们使用了 PostgreSQL Except 运算符来返回初始命令中未出现在第二个命令输出中的行。
  • 我们还了解了 PostgreSQL Except 运算符的 单表达式和多表达式的工作原理
  • 我们还使用了带有 ORDER By 子句的 PostgreSQL Except 来对命令输出进行排序。

下一个主题MongoDB vs PostgreSQL