SQL Minus運算子


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

1. SQL MINUS運算子簡介

除了UNIONUNION ALLINTERSECT運算子之外,SQL還為我們提供了MINUS運算子,用於從另一個結果集中減去一個結果集。

以下是MINUS運算子的語法。

SELECT
    id
FROM
    A 
MINUS 
SELECT
    id
FROM
    B;

要使用MINUS運算子,可以編寫單獨的SELECT語句並將MINUS運算子放在它們之間。 MINUS運算子返回第一個查詢生成的唯一行,但不返回第二個查詢生成的唯一行。

下圖是MINUS運算子的說明。

為了獲得結果集,資料庫系統執行兩個查詢並從第二個查詢中減去第一個查詢的結果集。
要使用MINUS運算子,SELECT子句中的列必須匹配,並且必須具有相同或至少可轉換的資料型別。

我們經常在ETL中使用MINUS運算子。 ETL是資料倉庫系統中的軟體元件。 ETL代表Extract,Transform和Load。 ETL負責將資料從源系統載入到資料倉庫系統。

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

2. SQL MINUS範例

請考慮範例資料庫中的 employeesdependents 表,它們的關係如下所示:

每個員工都有零個或多個家屬,而每個員工依賴於一個且只有一個員工。 家屬與員工之間的關係是一對多的關係。

dependents表中的employee_id列參照employees表中的employee_id列。

可以使用MINUS運算子查詢沒有任何家屬的員工。 要執行此操作,請從dependents表中的employee_id結果集中減去employees表中的employee_id結果集。

以下查詢實現了這個想法:

SELECT 
    employee_id
FROM
    employees 
MINUS 
SELECT 
    employee_id
FROM
    dependents;

執行上面查詢語句,得到以下結果:

2.1. SQL MINUS使用ORDER BY範例

要對MINUS運算子返回的結果集進行排序,請將ORDER BY子句放在最後一個SELECT語句的末尾。

例如,要對沒有任何家屬的員工進行排序,請使用以下查詢:

SELECT 
    employee_id
FROM
    employees 
MINUS 
SELECT 
    employee_id
FROM
    dependents
ORDER BY employee_id;

執行上面查詢語句,得到以下結果:

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