百木园-与人分享,
就是让自己快乐。

玩转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)

玩转GaussDB 中的SET操作符

使用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)
)

玩转GaussDB 中的SET操作符

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)
)

玩转GaussDB 中的SET操作符

EXCEPT / MINUS

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

–返回结果为:[e]

SELECT FC FROM (VALUES(‘a’),(‘b’),(‘c’),(‘e’)) Table1 (FC)
EXCEPT
SELECT FC FROM (VALUES(‘a’),(‘b’),(‘c’),(‘d’)) Table2 (FC)

玩转GaussDB 中的SET操作符

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)

玩转GaussDB 中的SET操作符

集合运算的使用场景

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

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

 

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


来源:https://www.cnblogs.com/huaweiyun/p/17171795.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » 玩转GaussDB 中的SET操作符

相关推荐

  • 暂无文章