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運算符有一個很好的理解,並知道如何應用它來比較兩個結果集。


上一篇: SQL Intersect運算符 下一篇: SQL子查詢