本教程解释了SQL INTERSECT运算符,并向演示如何应用它来获取两个或多个查询的交集。
1. SQL INTERSECT运算符简介
INTERSECT运算符是一个集合运算符,它从SELECT语句返回两个或多个结果集的不同行。
假设有两个表记录:A(1,2)和B(2,3)。
下图说明了A和B表的交集。

紫色部分是绿色和蓝色结果集的交集。
与UNION运算符一样,INTERSECT运算符从最终结果集中删除重复的行。以下语句说明了如何使用INTERSECT运算符查找两个结果集的交集。
SELECT
id
FROM
a
INTERSECT
SELECT
id
FROM
b;
要使用INTERSECT运算符,SELECT语句的列需要遵循以下规则:
- 列的数据类型必须兼容。
SELECT语句中的列数及其顺序必须相同。
3. SQL INTERSECT运算符示例
以下SELECT语句返回表A中的行:
SELECT
id
FROM
A;
+----+
| id |
+----+
| 1 |
| 2 |
+----+
2 rows in set
以下语句从表B中检索数据:
SELECT
id
FROM
B;
+----+
| id |
+----+
| 2 |
| 3 |
+----+
2 rows in set
以下语句使用INTERSECT运算符来获取两个查询的交集。
SELECT
id
FROM
a
INTERSECT
SELECT
id
FROM
b;
执行上面查询语句,得到以下结果:

SQL INTERSECT带有ORDER BY示例
要对INTERSECT运算符返回的结果集进行排序,请将ORDER BY子句放在所有语句的末尾。
例如,以下语句将INTERSECT运算符应用于A和B表,并按降序对id列的组合结果集进行排序。
SELECT
id
FROM
a
INTERSECT
SELECT
id
FROM
b
ORDER BY id DESC
执行上面查询语句,得到以下结果:

使用INNER JOIN子句模拟SQL INTERSECT运算符
大多数关系数据库系统支持INTERSECT运算符,如Oracle数据库,Microsoft SQL Server,PostgreSQL等。但是,某些数据库系统(MySQL)不提供INTERSECT运算符。
要模拟SQL INTERSECT运算符,可以使用INNER JOIN子句,如下所示:
SELECT
a.id
FROM
a
INNER JOIN b ON b.id = a.id
它返回A表中与B表中匹配行的行,这些行产生与INTERSECT运算符相同的结果。
现在您应该对SQL INTERSECT运算符有一个很好的理解,并知道如何使用它来查找多个查询的交集。
上一篇:
SQL Union运算符
下一篇:
SQL Minus运算符
