從下方文氏圖可以看出 Except 找出差集、Intersect 找出交集
利用下述範例實作
- Except:找出資料集 1 中有,但資料集 2 沒有的,並把資料集 1 重覆資料刪除,只留一筆
- Intersect:找出資料集 1 和資料集 2 都有的,並把重覆資料刪除,只留一筆
DECLARE @T1 TABLE (EmpNO int , EmpName nchar(10)) INSERT INTO @T1 VALUES (1,N'蔡一') , (2,N'陳二') , (3,N'張三') , (4,N'李四') , (5,N'王五') , (1,N'蔡一') , -- 故意重覆 (3,N'張三') , -- 故意重覆 (4,N'李四') -- 故意重覆 DECLARE @T2 TABLE (EmpNO int , EmpName nchar(10)) INSERT INTO @T2 VALUES (1,N'蔡一') , (4,N'李四') SELECT EmpNO , EmpName FROM @T1 -- 資料集 1 EXCEPT SELECT EmpNO , EmpName FROM @T2 -- 資料集 2 SELECT EmpNO , EmpName FROM @T1 -- 資料集 1 INTERSECT SELECT EmpNO , EmpName FROM @T2 -- 資料集 2
運算子優先順序:Intersect 優先順序高於 Except,因此下述語法會先進行資料集 2 和 資料集 3 的 INTERSECT,其結果再和資料集 1 進行 EXCEPT,結果會是上圖 Except 結果
SELECT EmpNO , EmpName FROM @T1 -- 資料集 1 EXCEPT SELECT EmpNO , EmpName FROM @T1 -- 資料集 2 INTERSECT SELECT EmpNO , EmpName FROM @T2 -- 資料集 3備註
- 兩個資料集的資料行數目與順序都要相同
- 兩個資料集的資料類型必須相容(隱含式轉換)
- 2013 DBA 天團
- 20150606
- 延伸閱讀
- UNION
沒有留言:
張貼留言