1、刚刚工作不久,经常接触oracle,但是对oracle很多东西都不是很熟。今天我们来了解一下union和union

all的简单使用说明。Union(union all): 指令的目的是将两个 SQL

语句的结果集合并起来,得到你所需要的查询结果。

网上对这两者之间的一个总结:

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

Union

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

2、对这个概念理解可能会有些模糊。我们通过实例来讲解,首先创建一个表Student,插入一些相应的测试数据。sql语句如下:

drop table student;

create table student

(

id int primary key,

name nvarchar2(50) not null,

score number not null

);

insert into student values(1,'Aaron',78);

insert into student values(2,'Bill',76);

insert into student values(3,'Cindy',89);

insert into student values(4,'Damon',90);

insert into student values(5,'Ella',73);

insert into student values(6,'Frado',61);

insert into student values(7,'Gill',99);

insert into student values(8,'Hellen',56);

insert into student values(9,'Ivan',93);

insert into student values(10,'Jay',90);

commit;

3、测试

union 命令的结果集,sql语句如下:

select *

from student

where id < 4

union

select *

from student

where id > 2 and id < 6

4、结果将是:

1 Aaron 78

2 Bill 76

3 Cindy 89

4 Damon 90

5 Ella 73

5、如果将union换成union all连接两个结果集,则返回结果是:

1 Aaron 78

2 Bill 76

3 Cindy 89

3 Cindy 89

4 Damon 90

5 Ella 73

小结:

可以看到,Union和Union All的区别之一在于对重复结果的处理。接下来我们将两个子查询的顺序调整一下,改为

--Union

select *

from student

where id > 2 and id < 6

union

select *

from student

where id < 4

看看执行结果是否和你期望的一致?

--Union All

select *

from student

where id > 2 and id < 6

union all

select *

from student

where id < 4

那么这个呢?答案是一模一样的~

6、据此我们可知,union和union all 区别在于在于对排序的处理。Union All将按照关联的次序组织数据,而Union将进行依据一定规则进行排序。那么这个排序规则是?我们换个查询方式看看:

select score,id,name

from student

where id > 2 and id < 6

union

select score,id,name

from student

where id < 4

结果如下:

73 5 Ella

76 2 Bill

78 1 Aaron

89 3 Cindy

90 4 Damon

和我们预料的一致:将会按照字段的顺序进行排序。之前我们的查询是基于id,name,score的字段顺序,那么结果集将按照id优先进行排序;而现在新的字段顺序也改变了查询结果的排序。并且,是按照给定字段a,b,c...的顺序进行的order by。即结果是order by a,b,c...........的。我们看下一个查询:

select score,id,name

from student

where id > 2

union

select score,id,name

from student

where id < 4

结果如下:

56 8 Hellen

61 6 Frado

73 5 Ella

76 2 Bill

78 1 Aaron

89 3 Cindy

90 4 Damon

90 10 Jay

93 9 Ivan

99 7 Gill

可以看到,对于score相同的记录,将按照下一个字段id进行排序。如果我们想自行控制排序,是不是用order by指定就可以了呢?答案是肯定的,不过在写法上有需要注意的地方

select score,id,name

from student

where id > 2 and id < 7

union

select score,id,name

from student

where id < 4

union

select score,id,name

from student

where id > 8

order by id des

order by子句必须写在最后一个结果集里,并且其排序规则将改变操作后的排序结果。对于Union、Union All都有效。

7、注意:

1,Union可以对字段名不同但数据类型相同的结果集进行合并;

2,如果字段名不同的结果集进行Union,那么对此字段的Order by子句将失效。

这里一起总结一下:

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

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

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

oracle union 类型转换,Oracle 中 union 和union all 的简单使用说明相关推荐

  1. oracle避免同一sql多次查询,Oracle SQL - 在一个查询中生成一行答案的最简单方法,因此我不必多次运行查询?...

    不确定我是否理解正确,但这可能是你想要的.但可能性能欠佳. 12:32:22 HR@vm_xe> l 1 with player(id, dt) as ( 2 select 1, date '2 ...

  2. oracle leg函数,Hive中的leg和lead函数简单使用

    介绍: Hive的分析函数又叫窗口函数,在oracle中就有这样的分析函数,主要用来做数据统计分析的. Lag和Lead分析函数可以在同一次查询中取出同一字段的前N行的数据(Lag)和后N行的数据(L ...

  3. 简单介绍oracle执行计划,Oracle性能优化之oracle中常见的执行计划及其简单解释

    一.访问表执行计划 1.table access full:全表扫描.它会访问表中的每一条记录(读取高水位线以内的每一个数据块). 2.table access by user rowid:输入源ro ...

  4. oracle union详解,oracle union用法 oracle中union的用法

    oracle中union的用法 只知道是用来左联接的,还有类似union all,谁有这个例子,要解释详细一点的一生中要有两次冲动,一次奋不顾身的爱情,一次为说走就走的旅行. UNION 指令的目的是 ...

  5. oracle+union+连接,Oracle中union/union all/Intersect/Minus用法

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

  6. oracle 二进制运算符,Oracle UNION运算符

    Oracle UNION运算符 在Oracle中,UNION运算符用于合并两个或多个Oracle SELECT语句的结果集.它结合了两个SELECT语句,并删除了它们之间的重复行. UNION运算符的 ...

  7. oracle union orderby,Oracle UNION和ORDER BY的奇怪问题

    以下查询在几乎每个数据库(提供或获取虚拟表)中都非常有效dual,包括Oracle: select 'A' as x from dual union all select 'B' from dual ...

  8. oracle 转换为double,Oracle中的类型转换 (转)

    Oracle中对不同类型的处理具有显式类型转换(Explicit)和自动类型转换(隐式类型转换Implicit)两种方式,对于显式类型转换,我们是可控的,但是对于自动类型转换,当然不建议使用,因为很难 ...

  9. mysql union order by_MySQL order by 在 union 中使用实例分析

    下面是用于例子测试的两张原始数据表: article 文章表: aid title content 1 文章1 文章1正文内容... 2 文章2 文章2正文内容... 3 文章3 文章3正文内容... ...

最新文章

  1. leetcode算法题--Group Anagrams
  2. 密码学之hill密码
  3. 易语言反截图_【易语言】模仿QQ截图
  4. 密码学数字信封的介绍
  5. 数据压缩 第二次作业
  6. 一对一直播社交聊天程序: JAVA中的Socket源码概述
  7. Intel发6款全新9代i9/i7/i5 CPU:巅峰8核
  8. 15.2. 网络监控
  9. c语言单分支编程题,C语言习题集(分支和选择).doc
  10. 强强联合!蚂蚁金服与新炬网络战略合作,共同致力于国产数据库的技术推广和生态建设
  11. arm linux开机第一屏,小白求助大神T1刷机提示成功,但开机卡在斐讯白屏界面。...
  12. Python爬虫前置知识
  13. 制作u盘winpe启动盘_重装系统——制作U盘启动盘
  14. 用计算机语言说我累了,我累了,真的好累(读到心酸)
  15. 我们终究是一群平凡的人
  16. 国内外大数据创业面面观
  17. 控制台报 [WDS] Disconnected!不影响代码运行。
  18. 【已解决】【高速版】如何显示(扫描)局域网中所有的在线主机IP及MAC地址?
  19. 解决:dockerd: failed to start daemon: Devices cgroup isn‘t mounted
  20. 工程伦理--13.1 什么是“邻避效应”?

热门文章

  1. Leetcode 322. 零钱兑换 (每日一题 20210824)
  2. 66. Plus One
  3. Tableau必知必会之巧用 Index 函数查看数据类别详情
  4. Elasticsearch 使用过程中有哪些坑?教你避开这些坑
  5. 遗传算法 简单函数优化
  6. python如何使用字典中的值并进行比较_python – 如何比较字典中的值?
  7. python程序多次运行_[Python]在一段Python程序中使用多次事件循环
  8. QTexe软件设置系统默认的图标
  9. Hadoop2.0 YARN
  10. 面试总结-百度(1)