SQL Intersect运算符

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

1. SQL INTERSECT运算符简介

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

假设有两个表记录:A(1,2)B(2,3)

下图说明了AB表的交集。

《SQL Intersect运算符》

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

与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运算符》

SQL INTERSECT带有ORDER BY示例

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

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

SELECT
    id
FROM
    a 
INTERSECT
SELECT
    id
FROM
    b
ORDER BY id DESC

执行上面查询语句,得到以下结果:

《SQL Intersect运算符》

使用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教程
        原文地址: https://www.yiibai.com/sql/sql-intersect.html
        本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
    点赞