PostgreSQL INTERSECT


PostgreSQL INTERSECT

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

例子中的PostgreSQL的交叉操作单发,多表达,并与ORDER BY子句。

什么是 PostgreSQL Intersect 运算符?

在PostgreSQL 中,INTERSECT 运算符检索两个输出中可用的任何行,就像UNION和Except Operators 一样。

换句话说,我们可以说PostgreSQL 的 intersect算子得到了多个数据集的交集。

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

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

PostgreSQL INTERSECT

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

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

PostgreSQL INTERSECT运算符的语法

PostgreSQL Intersect 运算符的图示如下:

SELECT expression1, expression2, ... expression_n  
FROM tables  
[WHERE conditions]  
INTERSECT  
SELECT expression1, expression2, ... expression_n  
FROM tables  
[WHERE conditions];

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

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

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

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

PostgreSQL INTERSECT 运算符示例

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

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

SELECT * FROM top_rated_cars;

输出

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

PostgreSQL INTERSECT

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

SELECT * FROM most_reliable_cars;

输出

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

PostgreSQL INTERSECT

  • PostgreSQL 与单个表达式INTERSECT的示例

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

SELECT Car_name  
FROM top_rated_cars  
INTERSECT  
SELECT Car_name  
FROM most_reliable_cars;

输出

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

PostgreSQL INTERSECT

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

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

SELECT Car_name  
FROM top_rated_cars  
WHERE launch_year< 2020  
INTERSECT  
SELECT Car_name  
FROM most_reliable_cars  
Where launch_year=2020;

输出

执行上述命令后,我们将得到以下输出,其中显示了我们在使用 where 条件后检索到的那些INTERSECT值。

PostgreSQL INTERSECT

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

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

PostgreSQL 与各种表达式INTERSECT的例子

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

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

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

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

输出

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

PostgreSQL INTERSECT

在上面的例子中,在每个数据集上添加了 WHERE 条件来过滤输出;因此,只有员工\表中的记录被返回,其中员工名称不是ross\

并且从部门\表中检索地址不是London 的记录

  • PostgreSQL INTERSECT 与 ORDER BY 子句

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

PostgreSQL 的语法与 ORDER BY 子句INTERSECT

下图用于表示 PostgreSQL 与 order by 子句INTERSECT:

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

PostgreSQL 与 Order by 子句INTERSECT的例子

在以下示例中,我们使用与员工\部门\类似的表来了解 INTERSECT 运算符与 ORDER BY 子句的用法:

SELECT address, phone  
FROM employee  
WHERE employee_name<> 'ross'  
INTERSECT  
SELECT address, phone  
FROM department  
WHERE address<>'London'  
ORDER BY 1;

输出

执行上面的命令后,我们将得到下面的结果集,它以升序显示按地址排序的结果,用ORDER BY 1 表示

地址列字段位于输出中的 #1 位置。

PostgreSQL INTERSECT

概述

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

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