玩转GaussDB 中的SET操作符

打印 上一主题 下一主题

主题 704|帖子 704|积分 2112

摘要:关系数据库中提供了一个关于集合的运算符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, 过滤出列表中不存在/存在于数据库中的项
 
点击关注,第一时间了解华为云新鲜技术~

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曹旭辉

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表