SQL Intersect運算子


本教學解釋了SQL INTERSECT運算子,並向演示如何應用它來獲取兩個或多個查詢的交集。

1. SQL INTERSECT運算子簡介

INTERSECT運算子是一個集合運算子,它從SELECT語句返回兩個或多個結果集的不同行。

假設有兩個表記錄:A(1,2)B(2,3)

下圖說明了AB表的交集。

紫色部分是綠色和藍色結果集的交集。

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運算子應用於AB表,並按降序對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運算子有一個很好的理解,並知道如何使用它來查詢多個查詢的交集。