写点什么

玩转 GaussDB 中的 SET 操作符

  • 2023-03-02
    中国香港
  • 本文字数:923 字

    阅读完需:约 3 分钟

玩转GaussDB 中的SET操作符

本文分享自华为云社区《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)UNIONSELECT 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)UNIONSELECT 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 ALLSELECT FC FROM (VALUES('a'),('b'),('c'),('d')) Table2 (FC))
复制代码


EXCEPT / MINUS


返回出现在第一个结果集但不出现在第二个结果集中的所有行(即两集合相减)


–返回结果为:[e]


SELECT FC FROM (VALUES(‘a’),(‘b’),(‘c’),(‘e’)) Table1 (FC)EXCEPTSELECT FC FROM (VALUES(‘a’),(‘b’),(‘c’),(‘d’)) Table2 (FC)
复制代码


INTERSECT


返回第一个查询结果集和第二个查询结果集共有的部分(即取集合交集)


–返回结果为:[a,b,c]


SELECT FC FROM (VALUES(‘a’),(‘b’),(‘c’),(‘e’)) Table1 (FC)INTERSECTSELECT FC FROM (VALUES(‘a’),(‘b’),(‘c’),(‘d’)) Table2 (FC)
复制代码


集合运算的使用场景


1、使用 UNION 代替 Where 子句中的 OR,查询速度更快


2、使用 EXCEPT 和 INTERSECT, 过滤出列表中不存在/存在于数据库中的项


【一起来玩转 PB 级数仓 GaussDB(DWS),分享你的技术经验与体验心得,赢开发者大礼包!】第 19 期有奖征文火热进行中!


此外,在云声平台提出您的宝贵建议,标题以【云驻计划-定向征文】开头,还有机会赢取额外奖励。


点击关注,第一时间了解华为云新鲜技术~

发布于: 18 分钟前阅读数: 6
用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
玩转GaussDB 中的SET操作符_数据库_华为云开发者联盟_InfoQ写作社区