我是凡人 发表于 2023-3-2 19:31:22

玩转GaussDB 中的SET操作符

摘要:关系数据库中提供了一个关于集合的运算符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), 返回结果为:
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

返回出现在第一个结果集但不出现在第二个结果集中的所有行(即两集合相减)
–返回结果为:
SELECT FC FROM (VALUES(‘a’),(‘b’),(‘c’),(‘e’)) Table1 (FC)
EXCEPT
SELECT FC FROM (VALUES(‘a’),(‘b’),(‘c’),(‘d’)) Table2 (FC)INTERSECT

返回第一个查询结果集和第二个查询结果集共有的部分(即取集合交集)
–返回结果为:
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.cnblogs.com/huaweiyun/p/17171795.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 玩转GaussDB 中的SET操作符