摘要:關系資料庫中提供了一個關于集合的運算子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, 過濾出串列中不存在/存在于資料庫中的項
點擊關注,第一時間了解華為云新鮮技術~
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/545638.html
標籤:MySQL
上一篇:MySQL資料庫常用操作命令
