玩轉GaussDB 中的SET操作符

語言: CN / TW / HK
摘要:關係數據庫中提供了一個關於集合的運算符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, 過濾出列表中不存在/存在於數據庫中的項

 

點擊關注,第一時間瞭解華為雲新鮮技術~