SQL INTERSECT

摘要:本教程解释了 SQL INTERSECT 运算符,并向您展示如何应用它来获取两个或多个查询的交集。

SQL INTERSECT 运算符的简介

INTERSECT 运算符是一种集合运算符,它返回来自 SELECT 语句的两个或多个结果集的不同行。

假设我们有两个表:A(1,2) 和 B(2,3)。

下图说明了 A 和 B 表的交集。

SQL-INTERSECT-Operator

紫色部分是绿色和蓝色结果集的交集。

UNION 运算符 一样,INTERSECT 运算符会从最终结果集中移除重复行。

以下语句说明了如何使用 INTERSECT 运算符查找两个结果集的交集。

SELECT
	id
FROM
	a 
INTERSECT
SELECT
	id
FROM
	b;Code language: SQL (Structured Query Language) (sql)

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

  • 列的数据类型必须兼容。
  • SELECT 语句中的列的数量及其顺序必须相同。

SQL INTERSECT 运算符范例

以下 SELECT 语句返回来自表 A 的行

SELECT
	id
FROM
	A;Code language: SQL (Structured Query Language) (sql)
Table A data

以下语句检索来自表 B 的数据

SELECT
	id
FROM
	B;Code language: SQL (Structured Query Language) (sql)
Table B data

以下语句使用 INTERSECT 运算符获取这两个查询的交集。

SELECT
	id
FROM
	a 
INTERSECT
SELECT
	id
FROM
	b;Code language: SQL (Structured Query Language) (sql)
SQL INTERSECT example

带有 ORDER BY 的 SQL INTERSECT 范例

要对 INTERSECT 运算符返回的结果集进行排序,您可以在所有语句末尾放置 ORDER BY 子句。

例如,以下语句将 INTERSECT 运算符应用于 A 表和 B 表,并按照 id 列中的值以降序对合并的结果集进行排序。

SELECT
	id
FROM
	a 
INTERSECT
SELECT
	id
FROM
	b
ORDER BY id DESC;Code language: SQL (Structured Query Language) (sql)
SQL INTERSECT with ORDER BY example

使用 INNER JOIN 子句模拟 SQL INTERSECT 运算符

大多数关系数据库系统都支持 INTERSECT 运算符,例如 Oracle 数据库、Microsoft SQL Server、PostgreSQL 等。但是,某些数据库系统不提供 INTERSECT 运算符,例如 MySQL。

若要模拟 SQL INTERSECT 运算符,您可以使用 INNER JOIN 子句,如下所示

SELECT
	a.id
FROM
	a
INNER JOIN b ON b.id = a.idCode language: SQL (Structured Query Language) (sql)

它返回 A 表中具有在 B 表中匹配行的行,其产生的结果与 INTERSECT 运算符相同。

现在您应该充分了解 SQL INTERSECT 运算符,并知道如何使用它来查找多个查询的交集。

本教程是否对您有帮助?