SQL Server Except(差積)運算符

在本教學中,將學習如何使用SQL Server EXCEPT從另一個查詢的另一個結果集中減去查詢的結果集。

SQL Server EXCEPT簡介

SQL Server EXCEPT比較兩個查詢的結果集,並返回第一個查詢中不是由第二個查詢輸出的不同行。 換句話說,EXCEPT從一個查詢結果中減去另一個查詢的結果集。

以下是SQL Server EXCEPT的語法:

query_1
EXCEPT
query_2

以下是在上述語法中組合兩個查詢的結果集的規則:

  • 兩個查詢中列的數量和順序必須相同。
  • 相應列的數據類型必須相同或相容。

下圖顯示了兩個結果集T1T2EXCEPT操作:

在此圖中:

  • T1結果集包括:1,23
  • T2結果集包括:2,34

T1T2差集結果將返回1,它是在T1結果集中,並T2結果集中沒有出現的行。

SQL Server EXCEPT示例

請參閱示例資料庫中的兩個表productsorder_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;

執行上面查詢語句,得到以下結果:
EXCEPT ORDER BY示例


上一篇: SQL Server集合操作符 下一篇: SQL Server約束