Union 与 Union ALL 的作用都是合并 SELECT 的查询结果集,那么它们有什么不同呢?
Union 将查询到的结果集合并后进行重查,将其中相同的行去除。缺点:效率低;
而Union ALL 则只是合并查询的结果集,并不重新查询,效率高,但是可能会出现冗余数据。

我们举个例子来说明一下:

比如数据库中有两张表 tab1 和 tab2。

tab1 中的数据有:

小王
小张

tab2 中的数据有:

小王
小李

执行查询:

代码如下:
SELECT * FROM tab1 UNION SELECT * FROM tab2

结果如下:

小王
小张
小李

如果执行如下查询:

代码如下:

SELECT * FROM tab1 UNION ALL SELECT * FROM tab2

则结果如下:

小王
小张
小王
小李

这回看出来有什么不同了吧?

union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。

Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;

Union All:对两个结果集进行并集操作,包括重复行,不进行排序;

Intersect:对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;

Minus:对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。

可以在最后一个结果集中指定Order by子句改变排序方式。

例如:

代码如下:

select employee_id,job_id from employees
union
select employee_id,job_id from job_history

以上将两个表的结果联合在一起。这两个例子会将两个select语句的结果中的重复值进行压缩,也就是结果的数据并不是两条结果的条数的和。如果希望即使重复的结果显示出来可以使用union all,例如:

2.在oracle的scott用户中有表emp

代码如下:

select * from emp where deptno >= 20
union all
select * from emp where deptno <= 30

这里的结果就有很多重复值了。

有关union和union all关键字需要注意的问题是:

union 和 union all都可以将多个结果集合并,而不仅仅是两个,你可以将多个结果集串起来。
使用union和union all必须保证各个select 集合的结果有相同个数的列,并且每个列的类型是一样的。但列名则不一定需要相同,oracle会将第一个结果的列名作为结果集的列名。例如下面是一个例子:

代码如下:

select empno,ename from emp
union
select deptno,dname from dept

我们没有必要在每一个select结果集中使用order by子句来进行排序,我们可以在最后使用一条order by来对整个结果进行排序。例如:

代码如下:

select empno,ename from emp
union
select deptno,dname from dept
order by ename; 

转载于:https://www.cnblogs.com/mosh/p/5597735.html

union 与 union all 及其他并集操作说明相关推荐

  1. php union all,Union与Union All的区别

    Union与Union All的区别 如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字.union(或称为联合)的作用是将多个结果合并 ...

  2. Union和Union All的区别

    Union和Union All的区别 假设我们有一个表Student,包括以下字段与数据: drop table student;   create table student ( id int pr ...

  3. Union和Union All到底有什么区别

    转自:https://www.cnblogs.com/wen-zi/p/9133754.html 以前一直不知道Union和Union All到底有什么区别,今天来好好的研究一下,网上查到的结果是下面 ...

  4. Oracle中的Union、Union All、Intersect、Minus 使用用法区别

      Oracle中的Union.Union All.Intersect.Minus 众所周知的几个结果集集合操作命令,今天详细地测试了一下,发现一些问题,记录备考. 假设我们有一个表Student,包 ...

  5. SQL Union 和 Union All 的区别以及二者的性能问题 - 使用Sqlite演示

    1 Union 和 Union All 的区别 Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序: Union All:对两个结果集进行并集操作,包括重复行,不进行排序: 也 ...

  6. oracle union 类型转换,Oracle 中 union 和union all 的简单使用说明

    1.刚刚工作不久,经常接触oracle,但是对oracle很多东西都不是很熟.今天我们来了解一下union和union all的简单使用说明.Union(union all): 指令的目的是将两个 S ...

  7. Oracle中的Union、Union All、Intersect、Minus

    Oracle中的Union.Union All.Intersect.Minus  众所周知的几个结果集集合操作命令,今天详细地测试了一下,发现一些问题,记录备考. 假设我们有一个表Student,包括 ...

  8. sql中union和union all的区别

    union 连接两个表查询的结果 假设我们有一个表Student,包括以下字段与数据: [c-sharp] view plaincopy drop table student; create tabl ...

  9. UNION 和UNION ALL的区别

    Union因为要进行重复值扫描,所以效率低.如果合并没有刻意要删除重复行,那么就使用Union All  两个要联合的SQL语句 字段个数必须一样,而且字段类型要"相容"(一致): ...

最新文章

  1. linux常用性能分析命令详解#TOP
  2. java.util.ComparableTimSort中的sort()方法简单分析
  3. C#.NET DataGridView 让部分单元格变成只读的例子程序
  4. docker容器的跨主机访问
  5. fastadmin出现token验证错误!_gitee 拥有3.7k星星的极速后台框架—FastAdmin了解一下...
  6. vue+vuex的应用笔记
  7. 学会计需要学计算机应用吗,会计都要学什么
  8. grub4dos进入linux,GRUB4DOS怎么进入系统?GRUB4DOS进入系统的详细步骤
  9. 史上最全的画册制作流程—设计前的策划
  10. 梦工厂将在红帽峰会畅谈云计算心得
  11. 行内元素之间产生的间隙
  12. 【C++】atomic简介
  13. 一脸懵逼学习Hadoop-HA机制(以及HA机制的配置文件,测试)
  14. windows server 2012 安装 VC++ 安装失败0x80240017解决方法
  15. 声明:博客内容不得用于商业用途,仅做学习交流。
  16. Linux Ubuntu 鼠标变为十字架锁死解决办法
  17. OpenGL实现图片边缘暗角效果(1)
  18. SHOI 2002 百事世界杯之旅 题解
  19. HTTPS在微信中打开空白解决方法
  20. 各省规模以上工业企业新产品销售收入(2006-2017年)

热门文章

  1. linux shell命令分布执行,Linux学习笔记:bash特性之多命令执行,shell脚本
  2. 华为交换机ipv6默认路由配置_静态路由和默认路由的配置
  3. mysql 多张表公用一个序列_Mysql--序列3--分库分表策略
  4. git拉取代码如何解决冲突_开源项目 git pull 代码冲突的解决方式?
  5. 9宫格 java_java 拼接头像9宫格
  6. hikaridatasource 加密后登陆不上_渗透测试 | 突破前端JS加密限制
  7. mysql时间格式函数_MySQL时间格式函数
  8. python 字符串 数字_Python基础教程:数字、字符串
  9. 【转】python-word2vec模块使用详解
  10. 拿下了一个美女图片网站!