首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2005 EXCEPT 與 INTERSECT 集合運算子詳解

     編輯:關於SqlServer

SQL Server 2005 引入 ANSI SQL 標準集合運算子 EXCEPT 與 INTERSECT,用於比較兩個結果集:

語意差異

運算子回傳結果
EXCEPT左側查詢有、右側查詢無的非重複列 (差集)。
INTERSECT左右兩側查詢都有的非重複列 (交集)。

使用限制

  1. 兩結果集欄位數、順序、資料型別必須相容。
  2. INTERSECT 優先序高於 EXCEPT;混用時需加括號明確順序。
  3. SELECT INTO 必須為第一個查詢。
  4. ORDER BY 僅能參考左側查詢欄位名/別名。

範例資料與查詢

CREATE TABLE TableA (col1 INT);
INSERT INTO TableA VALUES (1),(1),(2),(3),(4),(4),(5),(NULL),(NULL);
CREATE TABLE TableB (col2 INT);
INSERT INTO TableB VALUES (NULL),(1),(2),(3);
CREATE TABLE TableC (col3 INT);
INSERT INTO TableC VALUES (1),(5),(6);

-- EXCEPT: A 有但 B 沒有
SELECT col1 FROM TableA EXCEPT SELECT col2 FROM TableB;
-- 結果: 4, 5 (NULL 被視為相等而排除)

-- INTERSECT: A 與 B 都有
SELECT col1 FROM TableA INTERSECT SELECT col2 FROM TableB;
-- 結果: 1, 2, 3, NULL

-- 結合: (A EXCEPT B) INTERSECT C
SELECT col1 FROM TableA EXCEPT SELECT col2 FROM TableB
INTERSECT SELECT col3 FROM TableC;
-- 結果: 5

實務應用

  • 找出主資料表與暫存表的差異 (ETL 增量載入)。
  • 比對兩份報表資料一致性。
  • 權限審計:用戶擁有 vs 應有權限的差集/交集。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved