在本教學中,將學習如何使用SQL Server EXCEPT從另一個查詢的另一個結果集中減去查詢的結果集。
SQL Server EXCEPT簡介
SQL Server EXCEPT比較兩個查詢的結果集,並返回第一個查詢中不是由第二個查詢輸出的不同行。 換句話說,EXCEPT從一個查詢結果中減去另一個查詢的結果集。
以下是SQL Server EXCEPT的語法:
query_1
EXCEPT
query_2
以下是在上述語法中組合兩個查詢的結果集的規則:
- 兩個查詢中列的數量和順序必須相同。
- 相應列的數據類型必須相同或相容。
下圖顯示了兩個結果集T1和T2的EXCEPT操作:

在此圖中:
T1結果集包括:1,2和3。T2結果集包括:2,3和4。
T1和T2差集結果將返回1,它是在T1結果集中,並T2結果集中沒有出現的行。
SQL Server EXCEPT示例
請參閱示例資料庫中的兩個表products和order_items:
1. 簡單EXCEPT示例
以下示例使用EXCEPT運算符查找沒有銷售的產品:
SELECT
product_id
FROM
production.products
EXCEPT
SELECT
product_id
FROM
sales.order_items;
執行上面查詢語句,得到以下結果:
在此示例中,第一個查詢返回所有產品。 第二個查詢返回有銷售額的產品。 因此,結果集僅包括沒有銷售的產品。
2. EXCEPT ORDER BY示例
要對EXCEPT運算符創建的結果集進行排序,可在最後一個查詢中添加ORDER BY子句。 例如,以下示例查找沒有銷售的產品,並按ID按昇冪對產品進行排序。
SELECT
product_id
FROM
production.products
EXCEPT
SELECT
product_id
FROM
sales.order_items
ORDER BY
product_id;
執行上面查詢語句,得到以下結果:
上一篇:
SQL Server集合操作符
下一篇:
SQL Server約束
