本教學解釋了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
語句中的列數及其順序必須相同。以下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
運算子有一個很好的理解,並知道如何使用它來查詢多個查詢的交集。