首页 > 其他分享 >玩转GaussDB 中的SET操作符

玩转GaussDB 中的SET操作符

时间:2023-03-02 15:14:30浏览次数:53  
标签:SET UNION GaussDB FC VALUES 玩转 INTERSECT SELECT

摘要:关系数据库中提供了一个关于集合的运算符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, 过滤出列表中不存在/存在于数据库中的项

 

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

标签:SET,UNION,GaussDB,FC,VALUES,玩转,INTERSECT,SELECT
From: https://www.cnblogs.com/huaweiyun/p/17171795.html

相关文章

  • why is the setInterval task executed slower than the setTimeout task in the brow
    whyisthesetIntervaltaskexecutedslowerthanthesetTimeouttaskinthebrowserjavascriptenvironment?为什么在浏览器javascript环境下setInterval任务......
  • 轻松玩转makefile | 变量与模式
    前言本文通过简单的几个示例,以及对同一个Makefile进行几个版本的迭代,帮助快速的理解变量和模式规则的使用。1、回顾在上一篇文章中,我们使用Makefile编译fun.c和main.c这......
  • error MSB8020: The build tools for v142 (Platform Toolset = 'v142') cannot be fo
    多个VS版本编译报错:错误1errorMSB8020:Thebuildtoolsforv142(PlatformToolset='v142')cannotbefound.Tobuildusingthev142buildtools,pleaseinst......
  • vue 模拟set del 方法
    上篇主要对数组格式数据进行响应式处理,vue 有set 和del 方法可以对数组和对象进行修改和删除。代码如下:数组类型的数据修改和删除时候,只需要调用splice方法就可以,在上......
  • HashSet 与 List 性能
    很明显,通用HashSet<T>类的搜索性能高于通用类List<T>。只需将基于散列的密钥与类中的线性方法进行比较即可List<T>。然而,计算哈希键本身可能需要一些CPU周期,因此对......
  • 踩坑小计-Flutter中引用其他module的asset资源
    最近开发了一个module,其中使用了asset设置了一个图片资源,在调试module时一切正常,当把module作为一个模块依赖到其他项目时,就出现了如下错误:查了一下解决方案,在使用asset时......
  • C. Maximum Set[数学] [*1300-*1500]
    C.MaximumSet[数学][*1300-*1500]题目链接点我题意:一个集合是漂亮的,如果他的每一个元素都是集合中其他元素的倍数或者因子给定你一个\(l\)和\(r\)让你找出在\(......
  • EBS Form Builder:app_field.clear_dependent_fields和APP_FIELD.set_dependent_field
    用途:可以调用APP_FIELD.clear_dependent_fields和APP_FIELD.set_dependent_field来将两个(或多个)Item建立关联,当一个为空时,另一个不可录入,反正,可录入,且父ItemField变化......
  • Qt ComBox setModel 后无法清空
    问题阐述:在对combox进行了分配模型后setModel,想要清除combox内容,发现使用clear()没有起到作用。代码如下:1QSqlQueryModel*model=newQSqlQueryMode(this);2mode......
  • 轻松玩转Makefile | 基础用法
    前言本文通过几个简单的示例,可以快速了解Makefile的基本使用方法,适用于编译我们平时练习所编写的小量代码。1.make命令Makefile文件内容:all为目标,这里没有依赖的文......