文章目录
前言
之前看过一本书,介绍说SQL是一种面向集合的思维方式,最近就遇到一个做了2年java开发的同学在处理一组数据时,先是读取数据,再循环一条一条去处理数据,几十万的数据愣是处理了10分钟。但是只需要用sql写一个正则表达式就可以一次处理完这几十万的数据。所以要有面向集合的这种思维方式。
这篇主要是介绍Oracle数据库的四种集合的运算
1、union:返回一个不重复的结果集
图例:
举例:表lyy_13有5条记录
表lyy_14有9条记录,其中标记的两条与lyy_13重复。
我们使用union 连接两个查询集合后得到了一个没有重复记录的合集。记录数为12条,去掉了2条重复记录。
注意:当你想要做去重工作时,尽量不使用union,数据量不大时用distinct或者group by 语句来代替。
2、Union all:返回一个全集(包含重复的)
图例:
举例:还是刚才的两张表,使用union all会把两个数据集做整合,但是不会去除重复记录,如下图得到记录数为14条,有两个重复的数据存在。
3、minus:返回第一个查询存在,但是不在其他查询中的结果集
图例:
使用minus得到的时lyy_13中存在但是不在lyy_14中的数据。
4、Intersect:返回多个查询重合部分的结果集
图例:
intersect 得到了两个集合的交集,在两个表都存在的记录是两条。
注意:
集合计算要注意几个点:
(1)每个集合返回的字段数目要一致,数据类型要一致,否则会报错
(2)order by 不能写入某个查询集合
(3)查询结果的列名源自第一个查询的结果。查询结果列名为balance与第一个查询的列名一致。