摘要:在本教學中,您將學習如何使用 SQL MINUS 運算子,將一個結果集從另一個結果集中減去。
SQL MINUS 運算子簡介
除了 UNION
、UNION ALL
和 INTERSECT
運算子之外,SQL 還提供了 MINUS
運算子,讓您可以從另一個結果集中減去一個結果集。
以下說明 MINUS
運算子的語法。
SELECT
id
FROM
A
MINUS
SELECT
id
FROM
B;
Code language: SQL (Structured Query Language) (sql)
要使用 MINUS
運算子,請撰寫個別的 SELECT
陳述式,並在它們之間放置 MINUS
運算子。MINUS
運算子會傳回第一個查詢產生但第二個查詢未產生的唯一列。
下圖說明了 MINUS
運算子。

為了產生結果集,資料庫系統會執行兩個查詢,並從第二個查詢的結果集中減去第一個查詢的結果集。
為了使用 MINUS
運算子,SELECT
子句中的欄位必須在數量上匹配,並且必須具有相同或至少可轉換的資料類型。
我們經常在 ETL 中使用 MINUS
運算子。ETL 是資料倉儲系統中的軟體元件。ETL 代表提取 (Extract)、轉換 (Transform) 和載入 (Load)。ETL 負責將資料從來源系統載入到資料倉儲系統中。
MINUS
運算子,透過從來源系統的資料中減去目標系統的資料,來確保資料已完全載入。SQL MINUS 範例
請考慮範例資料庫中的以下 employees
和 dependents
表格。

每位員工可能有零個或多個家屬,而每位家屬僅依賴於一位員工。家屬和員工之間的關係是一對多的關係。
dependents
表格中的 employee_id
欄位參考到 employees
表格中的 employee_id
欄位。
您可以使用 MINUS
運算子來尋找沒有任何家屬的員工。為此,請從 dependents
表格中的 employee_id
結果集中減去 employees
表格中的 employee_id
結果集。
以下查詢說明了這個概念
SELECT
employee_id
FROM
employees
MINUS
SELECT
employee_id
FROM
dependents;
Code language: SQL (Structured Query Language) (sql)

SQL MINUS 與 ORDER BY 範例
若要排序 MINUS
運算子傳回的結果集,請將 ORDER BY
子句放置在最後一個 SELECT
陳述式的末尾。
例如,若要排序沒有任何家屬的員工,請使用以下查詢
SELECT
employee_id
FROM
employees
MINUS
SELECT
employee_id
FROM
dependents
ORDER BY employee_id;
Code language: SQL (Structured Query Language) (sql)

現在,您應該對 SQL MINUS
運算子有很好的理解,並知道如何應用它來比較兩個結果集。