SQL技巧:集合运算

在Oracle数据库中支持四种集合运算:UNION、UNION ALL、MINUS和INTERSECT。之前文章我们讲过表关联,那么其与表关联的区别在于哪里呢?表关联实际上是将多张表需要的数据汇聚到一行,而集合运算是将SELECT出来的不同结果集合并成一个新的结果集。下面我们分别的介绍下这四种集合运算。

一、UNION 和 UNION ALL

当我们需要将两个或两个以上的数据集组合成一个新的数据集的时候,就可以使用UNION 和 UNION ALL。图一可以很直观的展示出来这两种运算的结果以及不同。SQL技巧:集合运算

从图1.1运行的结果可以看出来 UNIION ALL 在合并数据集的时,不会去除重复数据SQL技巧:集合运算

从图1.2运行的结果可以看出来 UNIION 在合并数据集的时,会去除重复数据SQL技巧:集合运算

如果我们并不在乎数据重复的时,完全可以使用 UNION ALL,占用的资源比UNION少。

二、MINUS

图二展示的是MINUS运算的结果。查询数据集A的数据并排除数据B的内容。类似之前讲过的NOT EXISTS,忘记的去看之前的内容。SQL技巧:集合运算

图2.1和图2.2的结果,都是员工7839 为什么会出现不一样的结果呢?因为图2.1的逻辑是查询表EMP中的数据且不在EMP1中的值,而图2.2的逻辑是查询表EMP1中的数据且不在EMP中的值,所以导致查询出来的结果不一致。这里要注意在使用MINUS时,要注意输出是哪张表中的数据,顺序搞反会导致结果不一样。这类似于我们之前讲过表关联时候的主表。SQL技巧:集合运算SQL技巧:集合运算

图2.3 是使用 NOT EXIST 替代 MINUS 的脚本,结果是一致的。当然使用 NOT EXIST时,可以选择字段进行判断,而MINUS则是全字段匹配。这里注意下区别。SQL技巧:集合运算

三、INTERSECT

图三展示的是INTERSECT运算结果。查询两个数据集的交集。业务逻辑存在数据集A中且存在数据集B中的数据。类似之前讲过的EXIST。SQL技巧:集合运算

图3.1展示的是表EMP和表EMP1相同部分的结果。这个运算的时候,两张表的顺序是否会影响结果呢?大家可以自行验证。SQL技巧:集合运算

图3.2是使用EXIST替代INTERSECT 的脚本,这个是不是很眼熟。SQL技巧:集合运算

细心的小伙伴,会注意到在使用 NOT EXISTEXIST 替代的脚本 WHERE 条件地方为什么将emp.comm = emp1.comm 注释掉。大家先自行思考一下,敲一敲代码不注释看看结果。咱们下篇再说这个问题。

注意:

  • 每个结果集返回的字段数量要一致
  • 每一列对应的字段数据类型要一致,或者之间可以隐式转换
  • ORDER BY 不能单独在某一个数据集中使用
  • 最终输出的结果的列名和第一个结果集的一样

思考

  • 查询某张表中的重复数据,有几种方法了?

结语

探索数据库中的集合运算方法,我们将会发现数据操纵和查询的无限可能性。通过这篇文章,您应该已经了解了基本的集合运算符如何在Oracle数据库中使用,包括并集、交集和差集等,并且学习了如何通过更复杂的查询和操作来处理实际问题。

记住,虽然我们涵盖了许多内容,但数据库集合运算的领域还有很多可以深入探究的角落。不断的学习和实践将使你在处理日常工作任务时变得更加熟练,甚至能够找出更高效的解决方案。

感谢你花时间阅读这篇文章,希望它能帮助你更深入地理解数据库集合运算的概念和应用。如果你在实践过程中遇到任何问题,或者对其他相关话题有进一步的学习需求,欢迎随时提出。期待在未来的数据处理旅程中与你再次相遇!


原文始发于微信公众号(运维小九九):SQL技巧:集合运算

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/218474.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!