`
yuxuan1215
  • 浏览: 14732 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

UNION 与UNION ALL的区别

 
阅读更多
在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');

创建表test2并插入三条数据
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区别,用union还是union all主要看业务需求.docx

    在SQL查询中,`UNION` 和 `UNION ALL` 是两种用于合并多个SELECT语句结果集的方法,它们之间的主要区别在于数据去重处理和性能优化。了解这些概念对于优化SQL查询性能和满足特定的业务需求至关重要。 1. **UNION**...

    SQL语句 UNION 和 UNION ALL 使用

    通过本篇文章的学习,我们了解到 `UNION` 和 `UNION ALL` 的主要区别在于是否保留重复的行。此外,还介绍了使用这些关键字时需要注意的几个关键点,以及如何使用 `EXCEPT` 和 `INTERSECT` 运算符来处理结果集。这些...

    union all与order by用法

    UNION ALL 与 ORDER BY 用法详解 UNION ALL 和 ORDER BY 是 SQL 语言中的两个基本操作符,分别用于合并查询结果和排序数据。在 Oracle PL/SQL 中, UNION ALL 和 ORDER BY 的使用需要遵循一定的规则和限制。本文将...

    MySQL中使用or、in与union all在查询命令下的效率对比

    在上述例子中,当`first_name`列有索引时,`UNION ALL`的执行计划显示了两次`ref`,这表示对索引进行了两次非唯一性扫描,虽然执行时间较之前未建索引时有所降低,但与`OR`和`IN`相比,可能并不占优势。 当我们使用...

    sql利用union all行转列

    ### SQL利用UNION ALL进行行转列方法解析 在数据库操作中,经常需要对数据进行各种转换以满足不同的业务需求。其中,“行转列”(Pivot)是一种常见的数据转换方式,它能够将数据表中的某列或多列值转换为多列的...

    数据库中union和union all的区别

    在数据库查询中,UNION 和 UNION ALL 是两个非常重要的操作符,它们被用来组合不同的 SELECT 语句,形成一个单一的结果集。理解这两者之间的差异对于优化查询性能和获取准确的查询结果至关重要。 首先,UNION 操作...

    union和union All的区别.md

    union和union all的区别 两个查询的结果集中必须拥有相同的列数和相同的数据类型。 UNION 和 UNION ALL 操作的结果集的列名和数据类型是根据第一个查询的结果集来决定的,因此如果第一个查询的列名或数据类型发生...

    Sql中的UNION ALL

    #### UNION ALL 与 UNION 的区别 `UNION ALL`和`UNION`都可以用来合并结果集,但是它们之间有一个重要的区别:`UNION`会在最终结果集中去除重复的行,而`UNION ALL`则不会。这意味着如果两表中有相同的行,`UNION`...

    MySQL UNION 与 UNION ALL 语法与用法.docx

    MySQL UNION 与 UNION ALL 的区别在于,UNION 会删除结果集中重复的记录,而 UNION ALL 则会把所有的记录返回。 UNION ALL 的效率高于 UNION,因为 UNION 需要删除重复记录,而 UNION ALL 不需要。 MySQL UNION ...

    数据库中union 与union all 的区别

    在数据库查询中,`UNION` 和 `UNION ALL` 是两种用于合并多个查询结果集的方法,它们在处理数据合并时具有不同的行为和性能特点。 首先,`UNION` 操作符用于合并两个或更多 `SELECT` 查询的结果,并且会自动去除...

    简单了解MySQL union all与union的区别

    union 是对数据进行并集操作,不包括重复行,同时进行默认排序Union all 是对数据进行并集操作,包括重复行,不进行排序举例说明: 创建数据库表: CREATE TABLE `t_demo` ( `id` int(32) NOT NULL, `name` ...

    oracle集合union、union all、intersect、minus

    Union all 操作与 union 操作类似,但 union all 操作不会去除重复行。 union all 操作可以提高查询效率,因为它不需要去除重复行。 示例: ```sql SQL> select stuid from zr_stu where stuid > 4 union all ...

    Oracle中Union与Union All的区别(适用多个数据库)

    在数据库查询中,`UNION` 和 `UNION ALL` 是两个关键的SQL操作,主要用于合并多个 `SELECT` 语句的结果。它们的主要区别在于如何处理重复的行。 `UNION` 操作符用于合并两个或多个 `SELECT` 查询的结果集,但会自动...

    使用UNION ALL代替IF语句的合并处理案例

    测试结果显示,虽然在某些特定条件下,`UNION ALL`可能与`IF`语句的性能相当,但在大多数情况下,`IF`语句通常会有更好的表现,因为它避免了不必要的数据扫描和合并。 使用`UNION ALL`的主要问题在于,即使条件不...

    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 ;

    27.Oracle union多表查询1

    `UNION ALL` 与 `UNION` 类似,但不同之处在于它不删除重复的行。这意味着,如果两个结果集中有相同的行,`UNION ALL` 将保留所有这些行。这通常在不需要去重或者需要保留原始数据的情况下使用。例如: ```sql ...

    浅析mysql union和union all

    在MySQL数据库中,`UNION` 和 `UNION ALL` 是两种用于合并多个查询结果集的关键字,它们在处理数据时具有不同的特性和性能影响。 首先,`UNION` 关键字用于合并两个或更多 `SELECT` 查询的结果,并且会自动去除重复...

    sqlserver Union和SQL Union All使用方法

    `UNION ALL`与`UNION`相似,它也合并了多个SELECT语句的结果,但它不会去除重复的行。这意味着,如果在不同的数据源中有相同的行,`UNION ALL`会将这些行全部显示出来。例如: ```sql SELECT column_name1, column_...

Global site tag (gtag.js) - Google Analytics