本教程解释了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运算符