本教程解釋了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運算符
