SQL MINUS

摘要:在本教學中,您將學習如何使用 SQL MINUS 運算子,將一個結果集從另一個結果集中減去。

SQL MINUS 運算子簡介

除了 UNIONUNION ALLINTERSECT 運算子之外,SQL 還提供了 MINUS 運算子,讓您可以從另一個結果集中減去一個結果集。

以下說明 MINUS 運算子的語法。

SELECT
	id
FROM
	A 
MINUS 
SELECT
	id
FROM
	B;Code language: SQL (Structured Query Language) (sql)

要使用 MINUS 運算子,請撰寫個別的 SELECT 陳述式,並在它們之間放置 MINUS 運算子。MINUS 運算子會傳回第一個查詢產生但第二個查詢未產生的唯一列。

下圖說明了 MINUS 運算子。

SQL MINUS

為了產生結果集,資料庫系統會執行兩個查詢,並從第二個查詢的結果集中減去第一個查詢的結果集。

為了使用 MINUS 運算子,SELECT 子句中的欄位必須在數量上匹配,並且必須具有相同或至少可轉換的資料類型。

我們經常在 ETL 中使用 MINUS 運算子。ETL 是資料倉儲系統中的軟體元件。ETL 代表提取 (Extract)、轉換 (Transform) 和載入 (Load)。ETL 負責將資料從來源系統載入到資料倉儲系統中。

在完成資料載入後,我們可以使用 MINUS 運算子,透過從來源系統的資料中減去目標系統的資料,來確保資料已完全載入。

SQL MINUS 範例

請考慮範例資料庫中的以下 employeesdependents 表格。

employees_dependents_tables

每位員工可能有零個或多個家屬,而每位家屬僅依賴於一位員工。家屬和員工之間的關係是一對多的關係。

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 example

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 ORDER BY example

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

這個教學有幫助嗎?