摘要:關係資料庫中提供了一個關於集合的運算符SET操作符,其中包括以下操作:UNION/UNION ALL 並集、INTERSECT 交集、MINUS 差集。 本文分享自華為雲社區《GaussDB 中的SET操作符 (UNION, INTERSECT, MINUS)【玩轉PB級數倉GaussDB(D ...
摘要:關係資料庫中提供了一個關於集合的運算符SET操作符,其中包括以下操作:UNION/UNION ALL 並集、INTERSECT 交集、MINUS 差集。
本文分享自華為雲社區《GaussDB 中的SET操作符 (UNION, INTERSECT, MINUS)【玩轉PB級數倉GaussDB(DWS)】》,作者:林欣。
SET操作符有哪些
關係資料庫中提供了一個關於集合的運算符SET操作符,其中包括以下操作:
- UNION/UNION ALL 並集
- INTERSECT 交集
- MINUS 差集
操作符講解
UNION
合併兩個查詢結果集,隱式DINSTINCT,刪除重覆行(即取集合併集)
–合併兩個提取表/派生表(derived table), 返回結果為:[a,b,c,d,e]
SELECT FC FROM (VALUES(‘a’),(‘b’),(‘c’),(‘e’)) Table1 (FC)
UNION
SELECT FC FROM (VALUES(‘a’),(‘b’),(‘c’),(‘d’)) Table2 (FC)
使用COUNT函數統計其個數,可以發現其結果總共只有5行
SELECT COUNT(1) FROM( SELECT FC FROM (VALUES(‘a’),(‘b’),(‘c’),(‘e’)) Table1 (FC) UNION SELECT FC FROM (VALUES(‘a’),(‘b’),(‘c’),(‘d’)) Table2 (FC) )
UNION ALL
簡單合併兩個查詢結果集,不刪除重覆行
將 UNION 改為 UNION ALL 可以看到,重覆行也被統計進去了(結果行數由前面的5行變為8行)
SELECT COUNT(1) FROM( SELECT FC FROM (VALUES('a'),('b'),('c'),('e')) Table1 (FC) UNION ALL SELECT FC FROM (VALUES('a'),('b'),('c'),('d')) Table2 (FC) )
EXCEPT / MINUS
返回出現在第一個結果集但不出現在第二個結果集中的所有行(即兩集合相減)
–返回結果為:[e]
SELECT FC FROM (VALUES(‘a’),(‘b’),(‘c’),(‘e’)) Table1 (FC)
EXCEPT
SELECT FC FROM (VALUES(‘a’),(‘b’),(‘c’),(‘d’)) Table2 (FC)
INTERSECT
返回第一個查詢結果集和第二個查詢結果集共有的部分(即取集合交集)
–返回結果為:[a,b,c]
SELECT FC FROM (VALUES(‘a’),(‘b’),(‘c’),(‘e’)) Table1 (FC)
INTERSECT
SELECT FC FROM (VALUES(‘a’),(‘b’),(‘c’),(‘d’)) Table2 (FC)
集合運算的使用場景
1、使用UNION代替Where子句中的OR,查詢速度更快
2、使用EXCEPT和INTERSECT, 過濾出列表中不存在/存在於資料庫中的項