玩转GaussDB 中的SET操作符

玩转,gaussdb,set,操作符 · 浏览次数 : 26

小编点评

**关系数据库中提供了一个关于集合的运算符SET操作符** SET操作符用于在关系数据库中操作集合,包括并集、交集、差集。 **SET操作符的常用操作:** * **UNION**:将两个查询结果集的并集。 * **UNION ALL**:将两个查询结果集的并集,并删除重复行。 * **INTERSECT**:将两个查询结果集的交集。 * **MINUS**:将两个查询结果集的差集。 **使用方法:** ```sql SELECT FC FROM (VALUES('a', 'b', 'c', 'e')) Table1 (FC) UNION SELECT FC FROM (VALUES('a', 'b', 'c', 'd')) Table2 (FC) EXCEPT / MINUS SELECT FC FROM (VALUES('a', 'b', 'c', 'e')) Table1 (FC) INTERSECT SELECT FC FROM (VALUES('a', 'b', 'c', 'd')) Table2 (FC) ``` **示例:** ```sql SELECT FC FROM (VALUES('a', 'b', 'c', 'e')) Table1 (FC) UNION ALL SELECT FC FROM (VALUES('a', 'b', 'c', 'd')) Table2 (FC) EXCEPT / MINUS SELECT FC FROM (VALUES('a', 'b', 'c', 'e')) Table1 (FC) INTERSECT SELECT FC FROM (VALUES('a', 'b', 'c', 'd')) Table2 (FC) ``` **结果:** ``` [e] ``` **总结:** SET操作符是关系数据库中操作集合的有用工具。它可以用于创建新的集合,或从两个集合中提取交集或差集。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, 过滤出列表中不存在/存在于数据库中的项

 

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

与玩转GaussDB 中的SET操作符相似的内容:

玩转GaussDB 中的SET操作符

摘要:关系数据库中提供了一个关于集合的运算符SET操作符,其中包括以下操作:UNION/UNION ALL 并集、INTERSECT 交集、MINUS 差集。 本文分享自华为云社区《GaussDB 中的SET操作符 (UNION, INTERSECT, MINUS)【玩转PB级数仓GaussDB(D

bucket表:数仓存算分离中CU与DN解绑的关键

摘要:Bucket存储是数据共享中重要的一环,当前阶段,bucket存储可以将列存中的CU数据和DN节点解绑。 本文分享自华为云社区《存算分离之bucket表——【玩转PB级数仓GaussDB(DWS)】》,作者:yd_278301229 。 在云原生环境,用户可以自由配置cup型号、内存、磁盘、带

对比分析数仓中行列存的特性

摘要:行存表示了一种数据的存储方式,是最传统的一种存储方式。 本文分享自华为云社区《【玩转PB级数仓GaussDB(DWS)】行列存对比的一些事》,作者:sevenjiang。 行存表示了一种数据的存储方式,是最传统的一种存储方式。对于GaussDB(DWS)来说可以认为其表示存储引擎的基础实现,在

数仓在线运维:如何进行在线增删CN?

摘要:集群运行过程中,根据集群的综合负载和业务接入情况进行分析:增加CN可以适当降低CPU消耗,增大接入连接数,分散CN节点业务压力,根据实际情况来识别是否要增加CN,如果是提升集群容量和扩展比能力,建议进行扩容操作。 本文分享自华为云社区《【玩转PB级数仓GaussDB(DWS)】在线运维-在线增

基于SpringBoot实现操作GaussDB(DWS)的项目实战

摘要:本文就使用springboot结合mybatis plus在项目中实现对GaussDB(DWS)的增删改查操作。 本文分享自华为云社区《基于SpringBoot实现操作GaussDB(DWS)的项目实战【玩转PB级数仓GaussDB(DWS)】》,作者:清雨小竹。 GaussDB(DWS) 数

浅谈DWS函数出参方式

摘要:DWS的PL/pgSQL函数/存储过程中有一个特殊的语法PERFORM语法,用于执行语句但是丢弃执行结果的场景,常用于一些状态判断的场景。 本文分享自华为云社区《GassDB(DWS)功能 -- 函数出参 #【玩转PB级数仓GaussDB(DWS)】》,作者:譡里个檔。 DWS的PL/pgSQ

5个高并发导致数仓资源类报错分析

摘要:集群运行过程中,有时候会执行并发量比较高的业务场景,一些数据库没有为这种高并发作业配置合适的参数,会导致作业大量报错,这篇文章让你玩转并发作业。 本文分享自华为云社区《【玩转PB级数仓GaussDB(DWS)】在线运维 - 高并发导致资源类报错分析解决》,作者:323老四。 集群运行过程中,有

一文详解数仓GaussDB(DWS) 函数出参带出方式

摘要:本文主要讲解DWS函数出参带出方式。 本文分享自华为云社区《GaussDB(DWS)功能 -- 函数出参 #【玩转PB级数仓GaussDB(DWS)】》,作者:譡里个檔 。 DWS的PL/pgSQL函数/存储过程中有一个特殊的语法PERFORM语法,用于执行语句但是丢弃执行结果的场景,常用于一

解密数仓高可用failover流程

摘要: Gaussdb的HA采用主备从的架构实现数据可靠性。当主DN发生故障时,备DN走failover流程,升级成为新主DN,保证集群不因单DN故障而中断业务。 本文分享自华为云社区《【玩转PB级数仓GaussDB(DWS)】dws高可用之failover流程大解密》,作者:fxy0224。 众所

5步带你入门GaussDB(DWS)的GDS导入导出

摘要:本篇文档为使用GDS导入示例的具体简单步骤和示例。 本文分享自华为云社区《带你快速入门GDS导入导出,玩转PB级数仓GaussDB(DWS)》,作者: yd_220527686。 1、创建导入目标表 CREATE TABLE tpcds_reasons ( r_reason_sk intege