在本教學中,您將學習如何使用SQL MINUS
運算子從另一個結果集中減去一個結果集。
除了UNION,UNION ALL和INTERSECT運算子之外,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
運算子通過從源系統中的資料中減去目標系統中的資料來確保資料已完全載入。
請考慮範例資料庫中的 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;
執行上面查詢語句,得到以下結果:
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
運算子有一個很好的理解,並知道如何應用它來比較兩個結果集。