翼度科技»论坛 编程开发 mysql 查看内容

玩转GaussDB 中的SET操作符

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
摘要:关系数据库中提供了一个关于集合的运算符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]
  1. SELECT FC FROM (VALUES(‘a’),(‘b’),(‘c’),(‘e’)) Table1 (FC)
  2. UNION
  3. SELECT FC FROM (VALUES(‘a’),(‘b’),(‘c’),(‘d’)) Table2 (FC)
复制代码
使用COUNT函数统计其个数,可以发现其结果总共只有5行
  1. SELECT COUNT(1) FROM(SELECT FC FROM (VALUES(‘a’),(‘b’),(‘c’),(‘e’)) Table1 (FC)
  2. UNION
  3. SELECT FC FROM (VALUES(‘a’),(‘b’),(‘c’),(‘d’)) Table2 (FC))
复制代码
UNION ALL

简单合并两个查询结果集,不删除重复行
将 UNION 改为 UNION ALL 可以看到,重复行也被统计进去了(结果行数由前面的5行变为8行)
  1. SELECT COUNT(1) FROM(
  2. SELECT FC FROM (VALUES('a'),('b'),('c'),('e')) Table1 (FC)
  3. UNION ALL
  4. SELECT FC FROM (VALUES('a'),('b'),('c'),('d')) Table2 (FC)
  5. )
复制代码
EXCEPT / MINUS

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

返回第一个查询结果集和第二个查询结果集共有的部分(即取集合交集)
–返回结果为:[a,b,c]
  1. SELECT FC FROM (VALUES(‘a’),(‘b’),(‘c’),(‘e’)) Table1 (FC)
  2. INTERSECT
  3. 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】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具