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運算符有一個很好的理解,並知道如何使用它來查找多個查詢的交集。