在oracle数据库中,UNION与UNION ALL都是用来合并两个或者多个SELECT结果集,它们都要求这多个SELECT 有相同的数目的数据列,并且对应数据列的类型要相同。但UNION与UNION ALL在查询结果以及查询结果的默认排序方式都有着不同,下面分别介绍它们的用法及区别。
a) UNION
SQL UNION语法如下:
SELECT column1,column2,... FROM table1
UNION
SELECT column1,column2,... FROM table2
UNION操作的结果会去除相同的数据记录,并且按默认升序的方式把结果集排序
例如:我们创建TEST1以及TEST2两张表如下:
创建表test1:
create table TEST1
(
ID VARCHAR2 (10 ),
NAME VARCHAR2 (20 )
);
insert into test1( id, name ) values ( '1', 'andy');
insert into test1(id,name) values('2','ashely');
insert into test1(id,name) values('3','dona');
create table TEST2
(
ID VARCHAR2 (10 ),
NAME VARCHAR2 (20 )
);
insert into test1( id, name ) values ( '1', 'andy');
insert into test1(id,name) values('2','ashely');
insert into test1(id,name) values('3','beta');
UNION测试:
SELECT id,name FROM test1 结果如下:
ID NAME
1 andy
2 ahsely
3 dona
SELECT id,name FROM test2 结果如下:
ID NAME
1 andy
2 ahsely
3 beta
而这两个SELECT结果集UNION的结果如下:
SELECT id,name FROM test1
UNION
SELECT id,name FROM test2
结果如下:
ID NAME
1 andy
2 ahsely
3 beta
3 dona
从结果我们可以看出:
1、UNION 在合并两个结果集会选择不同的值,把重复的数据记录只保留一份
2、UNION后的数据集会默认排序,如果我们需要按照需要进行排序的话,只用在最后一个SELECT语句中 加上排序语句如
SELECT id,name FROM test1
UNION
SELECT id,name FROM test2 ORDER BY name ASC;就会按照name进行升序排序
3、UNION的结果列名会自动取第一个SELECT的列名作为返回数据集的列名与其他SELECT列名无关,因此其他数据列列名可省略是需要数据列数目相同,并且对应列的类型相同或者可以自动转换,但是实际应用中最好每个SELECT语句中加上对应的列名
b)UNION ALL
我们直接看下TEST1与TEST2使用UNION ALL的结果集:
SELECT id,name FROM test1
UNION ALL
SELECT id,name FROM test2
其结果集如下:
ID NAME
2 ahsely
2 ahsely
1 andy
1 andy
3 beta
3 dona
从查询的结果集我们可以得出以下结论:
1、UINON ALL合并的两个SELECT数据集会把所有的记录都列出来,包括重复的数据
2、UNION ALL的结果集没有顺序,如果需要对结果集进行排序,需要在最后一个SELECT语句中使用ORDER BY 如:
SELECT id,name FROM test1
UNION ALL
SELECT id,name FROM test2 ORDER BY name;
3、UNION ALL与UNION类似返回的结果集的列名与第一个SELECT列名相同,与其他SELECT的列名无关
因此在实际的开发和使用过程中,需要根据需求来确定使用UNION还是UNION ALL
分享到:
相关推荐
Mssql Union 与 Union All区别,场景示例说明
SQL语句 UNION 和 UNION ALL 使用
UNION和UNION ALL是数据库中用于合并查询结果集的操作符,它们有一些关键的区别。 UNION操作符将两个或多个SELECT语句的结果集合并为一个结果集,并自动去除其中的重复行。这意味着,如果两个结果集中有相同的行,...
主要介绍了MySQL中使用or、in与union all在查询命令下的效率对比,论证了在通常情况下union all并不一定比or及in更快,需要的朋友可以参考下
union和union all的区别 两个查询的结果集中必须拥有相同的列数和相同的数据类型。 UNION 和 UNION ALL 操作的结果集的列名和数据类型是根据第一个查询的结果集来决定的,因此如果第一个查询的列名或数据类型发生...
union all与order by用法,并详细举例,oracle pl/sql
sql利用union all行转列 利用最原始的方法进行行转列 简单明了
union 是对数据进行并集操作,不包括重复行,同时进行默认排序Union all 是对数据进行并集操作,包括重复行,不进行排序举例说明: 创建数据库表: CREATE TABLE `t_demo` ( `id` int(32) NOT NULL, `name` ...
MySQL UNION 与 UNION ALL 语法与用法.docx
当我们要对两个或两个以上的表进行操作时。我们经常会用到union 与union all
Oracle中的Union、Union_All、Intersect、Minus
oracle集合union、union all、intersect、minus
此资源为.txt文件,里面描述了sql中union all的使用方法和案例,如果需要可以下杂
SELECT ... UNION ALL SELECT C.TRD_NO FROM XXXXXXXXX C WHERE C.CLIENT_CD = W_IN_CLIENT_CD ) D WHERE A.TRD_NO = D.TRD_NO AND A.CLIENT_CD = W_IN_CLIENT_CD AND A.RESULT IS NULL ;
如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字。union(或称为联合)的作用是将多个结果合并在一起显示出来
在数据库中,UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。 MySQL中的UNION UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算...
在数据库中,UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。 MySQL中的UNION UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算...
一、UNION和UNION ALL的作用和语法 UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行。UNION 内部的 SELECT 语句必须拥有相同数量的列,列也必须拥有相似的数据类型。同时,每条 SELECT 语句中...