PostgreSQL EXCEPT


PostgreSQL EXCEPT

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

以及带有单个和多个Expression 以及order by 子句PostgreSQL EXCEPT运算符示例

什么是 PostgreSQL EXCEPT运算符?

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

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

EXCEPT运算符会从最初的数据集返回的所有记录,然后从第二个数据集消除所有值。

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

PostgreSQL EXCEPT

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

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

PostgreSQL EXCEPT 运算符的语法

PostgreSQL EXCEPT运算符的说明如下:

SELECT expression1, expression2, ... expression_n  
FROM table P  
[WHERE conditions]  
EXCEPT  
SELECT expression1, expression2, ... expression_n  
FROM table Q  
[WHERE conditions];

在上述语法中,我们有以下参数,我们在下表中讨论了这些参数:

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

PostgreSQL EXCEPT运算符示例

要了解PostgreSQL EXCEPT运算符的工作原理**我们将采用PostgreSQL UNION 教程中创建的top_rated_carsmost_reliable_cars**表:

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

SELECT * FROM top_rated_cars;

输出

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

PostgreSQL EXCEPT

以下命令返回most_reliable_cars表中的数据:

SELECT * FROM most_reliable_cars;

输出

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

PostgreSQL EXCEPT

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

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

SELECT Car_name  
FROM top_rated_cars  
EXCEPT  
SELECT Car_name  
FROM most_reliable_cars;

输出

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

PostgreSQL EXCEPT

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

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

PostgreSQL 示例,除了各种表达式

我们现在将看到一个示例示例来了解 PostgreSQL EXCEPT运算符处理多列的情况。

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

为此,我们从组织数据库中获取员工\部门\表,该数据库是我们在 PostgreSQL 教程的前面部分创建的。

SELECT address, phone  
FROM employee  
WHERE employee_name<>'ross'  
EXCEPT  
SELECT address, phone  
FROM department  
WHERE address<>'London';

输出

执行上述命令后,我们将得到以下输出,其中显示了员工\表中地址和电话值与部门表的地址和电话值不匹配的记录。

PostgreSQL EXCEPT

在上面的示例中,Except 操作员命令将检索员工表的值,其地址、电话 值与*部门表的地址和电话列*值不匹配。

  • PostgreSQL 除了 ORDER BY 子句

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

PostgreSQL 的语法,除了 ORDER BY 子句

下图用于表示 PostgreSQL 除了带有 order by 子句:

SELECT select_list  
FROM table1  
EXCEPT  
SELECT select_list  
FROM table2  
ORDER BY sort_expression;

带有 Order by 子句的 PostgreSQL EXCEPT 示例

在以下示例中,我们使用与top_rated_car\most_reliable_cars\类似的表来了解 EXCEPT 运算符与 ORDER BY 子句的用法:

SELECT * FROM top_rated_cars  
EXCEPT  
SELECT * FROM most_reliable_cars  
ORDER BY Car_name;

输出

执行上面的命令,该命令将显示排序后,我们会得到下面的结果集top_rated_cars升序表示由ORDER BY Car_name。而Car_name列字段都在#1输出的地方。

PostgreSQL EXCEPT

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

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

概述

PostgreSQL EXCEPT部分,我们学习了以下主题:

  • 我们使用了PostgreSQL EXCEPT运算符来返回初始命令中未出现在第二个命令的输出中的行。
  • 我们也了解了PostgreSQL的工作方式,除了**单和多**操作符
  • 我们还使用了PostgreSQL 除了 ORDER By子句来对命令输出进行排序。