SQL INTERSECT

摘要:本教學說明 SQL INTERSECT 運算子,並示範如何使用它來取得兩個或多個查詢的交集。

SQL INTERSECT 運算子簡介

INTERSECT 運算子是一個集合運算子,它會從 SELECT 陳述式中傳回兩個或多個結果集中不同的資料列。

假設我們有兩個表格:A(1,2) 和 B(2,3)。

下圖說明 A 和 B 表格的交集。

SQL-INTERSECT-Operator

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

如同 UNION 運算子,INTERSECT 運算子會從最終結果集中移除重複的資料列。

以下陳述式說明如何使用 INTERSECT 運算子來找出兩個結果集的交集。

SELECT
	id
FROM
	a 
INTERSECT
SELECT
	id
FROM
	b;Code language: SQL (Structured Query Language) (sql)

要使用 INTERSECT 運算子,SELECT 陳述式的資料行必須遵循以下規則

  • 資料行的資料類型必須相容。
  • SELECT 陳述式中資料行的數量及其順序必須相同。

SQL INTERSECT 運算子範例

以下的 SELECT 陳述式會從表格 A 傳回資料列

SELECT
	id
FROM
	A;Code language: SQL (Structured Query Language) (sql)
Table A data

以下的陳述式會從表格 B 擷取資料

SELECT
	id
FROM
	B;Code language: SQL (Structured Query Language) (sql)
Table B data

以下的陳述式使用 INTERSECT 運算子來取得兩個查詢的交集。

SELECT
	id
FROM
	a 
INTERSECT
SELECT
	id
FROM
	b;Code language: SQL (Structured Query Language) (sql)
SQL INTERSECT example

搭配 ORDER BY 的 SQL INTERSECT 範例

若要排序 INTERSECT 運算子傳回的結果集,您需要在所有陳述式的結尾加上 ORDER BY 子句。

例如,以下的陳述式將 INTERSECT 運算子應用於 A 和 B 表格,並依 id 資料行以遞減順序排序合併的結果集。

SELECT
	id
FROM
	a 
INTERSECT
SELECT
	id
FROM
	b
ORDER BY id DESC;Code language: SQL (Structured Query Language) (sql)
SQL INTERSECT with ORDER BY example

使用 INNER JOIN 子句模擬 SQL INTERSECT 運算子

大多數關聯式資料庫系統都支援 INTERSECT 運算子,例如 Oracle Database、Microsoft SQL Server、PostgreSQL 等。然而,某些資料庫系統不提供 INTERSECT 運算子,例如 MySQL。

若要模擬 SQL INTERSECT 運算子,您可以使用 INNER JOIN 子句,如下所示

SELECT
	a.id
FROM
	a
INNER JOIN b ON b.id = a.idCode language: SQL (Structured Query Language) (sql)

它會傳回表格 A 中與表格 B 中有相符資料列的資料列,這會產生與 INTERSECT 運算子相同的結果。

現在您應該對 SQL INTERSECT 運算子有充分的了解,並且知道如何使用它來找到多個查詢的交集。

本教學對您有幫助嗎?