玩转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), 返回结果为:[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, 过滤出列表中不存在/存在于数据库中的项

 

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

posted @   华为云开发者联盟  阅读(45)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
历史上的今天:
2022-03-02 分享几个你可能不知道的交互式Git 命令
2022-03-02 实践GoF的23的设计模式:SOLID原则(下)
2022-03-02 数仓中长跳转问题复现及解决方案
2022-03-02 Redis现网那些坑:用个缓存,还要为磁盘故障买单?
2021-03-02 为AR&VR黑科技:以“自由视角”360度尽展舞台唯美
2021-03-02 一个15年的架构师谈“如何成为一名优秀的解决方案架构师”
2021-03-02 SARIF:DevSecOps工具与平台交互的桥梁
点击右上角即可分享
微信分享提示