前言
SQL集运算符,比较常见的有"UNION" 、“UNION ALL”、“MINUS”,而ORACLE在21c版本新增了多个SQL集运算符,至此已支持ANSI SQL中定义的所有SQL集运算关键字,方便各类数据库移植。
EXCEPT/EXCEPT ALL
EXCEPT意思为排除,其实和MINUS是等效的,即对于上方数据集的元素,只要下方数据集中存在,就剔除,只返回下方数据集中不存在的元素,但需要注意的是,如果上方数据集中存在重复元素,它会去重只返回其一。
with t1 as
(select COLUMN_VALUE C1
from table(ora_mining_varchar2_nt('A', 'B', 'B', 'C', 'C', 'D', 'Z'))),
T2 AS
(select COLUMN_VALUE C1
from table(ora_mining_varchar2_nt('A', 'B', 'B', 'C', 'E', 'F', 'F')))
SELECT C1 FROM T1
EXCEPT
SELECT C1 FROM T2;
C1
---
D
Z
with t1 as
(select COLUMN_VALUE C1
from table(ora_mining_varchar2_nt('A', 'B', 'B', 'C', 'C', 'D', 'Z'))),
T2 AS
(select COLUMN_VALUE C1
from table(ora_mining_varchar2_nt('A', 'B', 'B', 'C', 'E', 'F', 'F')))
SELECT C1 FROM T2
EXCEPT
SELECT C1 FROM T1;
C1
---
E
F
复制
EXCEPT ALL和EXCEPT类似,区别只在于,如果上方数据集中存在相同元素,它是逐个剔除,重复元素分开算。
with t1 as
(select COLUMN_VALUE C1
from table(ora_mining_varchar2_nt('A', 'B', 'B', 'C', 'C', 'D', 'Z'))),
T2 AS
(select COLUMN_VALUE C1
from table(ora_mining_varchar2_nt('A', 'B', 'B', 'C', 'E', 'F', 'F')))
SELECT C1 FROM T1
EXCEPT ALL
SELECT C1 FROM T2;
C1
---
C
D
Z
--注意:虽然上下都有C,但还是返回了一个C
with t1 as
(select COLUMN_VALUE C1
from table(ora_mining_varchar2_nt('A', 'B', 'B', 'C', 'C', 'D', 'Z'))),
T2 AS
(select COLUMN_VALUE C1
from table(ora_mining_varchar2_nt('A', 'B', 'B', 'C', 'E', 'F', 'F')))
SELECT C1 FROM T2
EXCEPT ALL
SELECT C1 FROM T1;
C1
---
E
F
F
复制
INTERSECT/INTERSECT ALL
INTERSECT是交集,即返回上下两个数据集中相同的部分,对于数据集中相同的元素,去重只返回其一。
with t1 as
(select COLUMN_VALUE C1
from table(ora_mining_varchar2_nt('A', 'B', 'B', 'C', 'C', 'D', 'Z'))),
T2 AS
(select COLUMN_VALUE C1
from table(ora_mining_varchar2_nt('A', 'B', 'B', 'C', 'E', 'F', 'F')))
SELECT C1 FROM T1
INTERSECT
SELECT C1 FROM T2;
C1
---
A
B
C
复制
INTERSECT ALL和INTERSECT类似,区别只在于,如果数据集中存在相同元素,它返回的数据不会去重。
with t1 as
(select COLUMN_VALUE C1
from table(ora_mining_varchar2_nt('A', 'B', 'B', 'C', 'C', 'D', 'Z'))),
T2 AS
(select COLUMN_VALUE C1
from table(ora_mining_varchar2_nt('A', 'B', 'B', 'C', 'E', 'F', 'F')))
SELECT C1 FROM T1
INTERSECT ALL
SELECT C1 FROM T2;
C1
---
A
B
B
C
复制
总结
其实可以发现,新增的这些用法,和之前的UNION/UNION ALL具有相同的特征,归纳整理如下
运算符 | 含义 | 结果是否去重 | 备注 |
---|---|---|---|
UNION | 并集 | 是 | |
UNION ALL | 并集 | 否 | |
MINUS | 差集 | 是 | |
MINUS ALL | 差集 | 否 | |
EXCEPT | 差集 | 是 | 等效于MINUS |
EXCEPT ALL | 差集 | 否 | 等效于MINUS ALL |
INTERSECT | 交集 | 是 | |
INTERSECT ALL | 交集 | 否 |
- 本文链接: https://www.darkathena.top/archives/enhanced-sql-set-operators
- 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
最后修改时间:2021-12-30 21:26:23
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
文章被以下合辑收录
评论
相关阅读
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
428次阅读
2025-04-17 17:02:24
Before & After:SQL整容级优化
薛晓刚
123次阅读
2025-04-14 22:08:44
SQL 优化之 OR 子句改写
xiongcc
114次阅读
2025-04-21 00:08:06
Mysql/Oracle/Postgresql快速批量生成百万级测试数据sql
hongg
85次阅读
2025-04-07 15:32:54
“G”术时刻:资深工程师揭秘GBase数据库Hint核心技巧 实现SQL性能跃升
GBASE数据库
63次阅读
2025-04-25 10:10:28
轻松上手 SQLynx:以 MySQL 为基础的安装与使用指南
K.
51次阅读
2025-04-21 00:32:59
如何高效使用 Text to SQL 提升数据分析效率?四个关键应用场景解析
镜舟科技
49次阅读
2025-04-15 18:58:40
SQL2API 核心理念:如何重构数据服务交付范式
K.
43次阅读
2025-04-21 00:43:19
QuickAPI 全生命周期管理:从开发到退役的闭环实践
K.
43次阅读
2025-04-21 00:42:25
QuickAPI 核心功能解析:Web 化数据库管理工具的革新与实践
K.
41次阅读
2025-04-21 00:39:48
热门文章
【ORACLE】教你怎么自主免费开通ORACLE的MOS权限
2022-01-17 7098浏览
【恭贺新春】SQL还能这样玩之我用sql写福字
2022-01-08 3799浏览
【ORACLE】关于ORACLE数据库中UNISTR函数转换UNICODE编码字符串为中文的思考
2021-10-07 3716浏览
【openGauss】谈一谈PostgreSQL及openGauss中的package
2022-01-18 3706浏览
【ORACLE】谈一谈Oracle数据库使用的字符集,不仅仅是乱码
2022-01-23 3375浏览
最新文章
【ORACLE】记录一些ORACLE的merge into语句的BUG
2025-04-22 463浏览
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
2025-04-22 437浏览
【ORACLE】char类型和sql优化器发生的“错误”反应
2025-03-04 462浏览
【ORACLE】ORACLE19C在19.13版本前的一个严重BUG-24761824
2025-03-04 639浏览
【ORACLE】case when语句的语法陷阱
2025-02-09 374浏览
目录