sql中UNION和UNION ALL的区别
写sql时我们经常会遇到需要把从多张表查询的集果集进行合并。这时就用到了union。使用union或union all 时一定要保证查询的列的一致性 。不然sql会报错。字段不一致的话可以用单引号来占位。
例:
SELECT T102.CI_ID AS RES_ID,
T102.CITYPE_ID AS RESTYPE_ID,
T102.ASSET_NUMB AS RES_CODE,
'' AS RES_E_NAME,
T102.CI_NAME AS RES_NAME,
'' AS APPNAME_NAME,
'' AS ORIGINAL_ID,
T102.ASSET_BRAND AS BRAND_ID,
T102.ASSET_BRAND_NAME AS BRAND_NAME,
T102.SERIES AS SERIES_ID,
T102.SERIES_NAME AS SERIES_NAME,
T102.MODEL AS SPECMODEL_ID,
T102.MODEL_NAME AS SPECMODEL_NAME,
T102.NETWORK AS SECZONE_ID,
T102.INSTALSITE_NAME AS COMPUTERROOM_NAME,
T102.INSTALSITE AS COMPUTERROOM_ID,
T102.CABINET_NO AS CABINET_ID,
T102.CABINET_NO_NAME AS CABINET_NAME,
'' AS RES_GRADE,
'' AS IPV4_DESC,
'' AS BG_ID,
T102.RUN_CORP_CODE AS BC_ID,
T102.REMARKS AS RES_DESC,
T102.ENABLED_STATUS,
T102.DELETED_FLAG,
'' AS OSTYPE_ID,
'' AS OS_VERSION_NO,
T102.CREATED_AT,
T102.UPDATED_AT,
T102.DELETED_AT
FROM CI_T10203 T102
WHERE T102.DELETED_FLAG = 'N' --磁带库
UNION ALL
SELECT T102.CI_ID AS RES_ID,
T102.CITYPE_ID AS RESTYPE_ID,
T102.ASSET_NUMB AS RES_CODE,
'' AS RES_E_NAME,
T102.CI_NAME AS RES_NAME,
'' AS APPNAME_NAME,
'' AS ORIGINAL_ID,
T102.ASSET_BRAND AS BRAND_ID,
T102.ASSET_BRAND_NAME AS BRAND_NAME,
T102.SERIES AS SERIES_ID,
T102.SERIES_NAME AS SERIES_NAME,
T102.MODEL AS SPECMODEL_ID,
T102.MODEL_NAME AS SPECMODEL_NAME,
T102.NETWORK AS SECZONE_ID,
T102.INSTALSITE_NAME AS COMPUTERROOM_NAME,
T102.INSTALSITE AS COMPUTERROOM_ID,
T102.CABINET_NO AS CABINET_ID,
T102.CABINET_NO_NAME AS CABINET_NAME,
'' AS RES_GRADE,
'' AS IPV4_DESC,
'' AS BG_ID,
T102.RUN_CORP_CODE AS BC_ID,
T102.REMARKS AS RES_DESC,
T102.ENABLED_STATUS,
T102.DELETED_FLAG, '' AS OSTYPE_ID,
'' AS OS_VERSION_NO,
T102.CREATED_AT,
T102.UPDATED_AT,
T102.DELETED_AT FROM CI_T10204 T102
WHERE T102.DELETED_FLAG = 'N'
下面就来说明union和union all的区别
准备一张测试数据表。注意mysql中的varchar在oracle中是varchar2
drop table if exists student;
create table student
(
id int primary key,
name varchar2(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;
select * from student where id < 4
union
select * from student where id > 2 and id < 6
--查询结果为
1 Aaron 78
2 Bill 76
3 Cindy 89
4 Damon 90
5 Ella 73
select * from student where id < 4
union all
select * from student where id > 2 and id < 6
--查询结果为
1 Aaron 78
2 Bill 76
3 Cindy 89
3 Cindy 89
4 Damon 90
5 Ella 73
由此可以看出union和union all的区别在于对重复数据的处理。
union 在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的集果集进行排序运算,删除重复的记录再返回结果集。实际使用时大部分是不会产生重复的记录。
union all只是简单的将两个结果合并就返回。如果返回的结果集中有重复的数据,那么返回的结果集中就包含有重复数据。
从性能上讲union all 要比union快很多,它没有排序去重的耗时。如果表数据量很大,并且可以确定合并的结果集中不会包含重复数据的话。就使用union all.
我一般使用union all.真出现重复数据了再检查一下。
sql中UNION和UNION ALL的区别的更多相关文章
- LINQ to SQL 中 Concat、Union、Intersect、Except 方法的使用
Ø 前言 LINQ to SQL 中需要对两个或多个数据集进行操作,比如:合并.取交集等,主要使用下面四个方法,这四个方法都是 System.Linq.IQueryable<out T> ...
- SQL中intersect、union、minus和except 运算符
1.intersect运算符intersect运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表.当 ALL 随 INTERSECT 一起使用时 (inte ...
- SQL中的Join和Where的区别
一.sql语句中left join.inner join中的on与where的区别 0.各种join操作的概念和作用 left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录. ...
- SQL中join和cross join的区别
SQL中的连接可以分为内连接,外连接,以及交叉连接 . 1. 交叉连接CROSS JOIN 如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积: 举例, ...
- SQL中instr和like的使用区别
1.instr函数 instr函数是一个字符串处理函数,它在Oracle/PLSQL中是返回子字符串在源字符串中的位置,如果在源串中没有找到子串,则返回0. instr函数定义如下: /* * 返回子 ...
- SQL中distinct 和 row_number() over() 的区别及用法
1 前言 在咱们编写 SQL 语句操作数据库中的数据的时候,有可能会遇到一些不太爽的问题,例如对于同一字段拥有相同名称的记录,我们只需要显示一条,但实际上数据库中可能含有多条拥有相同名称的记录,从而在 ...
- SSM框架的sql中参数注入(#和$的区别)
<select id="findUsersByUserName2" resultType="java.util.Map" parameterType=&q ...
- Access与SQL中的IsNull(),IS NULL的区别
Access也有IsNull函数,但意义和参数却和T-SQL中的不同. 在T-SQL(也就是SQL Server所支持的SQL语言)中,IsNull的作用是把空值替代成指定的值.然而在Access中, ...
- Sql中的并(UNION)、交(INTERSECT)、差(minus)、除去(EXCEPT)详解
UNION 查询选修了180101号或180102号课程或二者都选修了的学生学号.课程号和成绩. (SELECT 学号, 课程号, 成绩 FROM 学习 WHERE 课程号='180101' ...
- SQL中SET和SELECT赋值的区别
最近的项目写的SQL比较多,经常会用到对变量赋值,而我使用SET和SELECT都会达到效果. 那就有些迷惑,这两者有什么区别呢?什么时候哪该哪个呢? 经过网上的查询,及个人练习,总结两者有以下几点主要 ...
随机推荐
- js event事件对象概括
事件是用户或者浏览器自身执行的动作,而响应某个事件的函数就叫做事件处理程序或者叫事件侦听器. 定义事件处理程序可以大致分为以下三种: 一.html事件处理程序 元素支持的每种事件都可以用一个与之对应的 ...
- 关于JQuery animate()方法
html: <button>点击我</button> <p>如果你想在一个涉及动画的函数之后来执行语句,请使用callback函数</p> <di ...
- Python基础-面向过程编程实现Linux下cat -rl ‘dir’ |grep ‘keywords’ 功能
函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. ...
- 《一马当先 O2O创业真人秀》阿里云创客+项目提交报名中
传统行业与互联网的相互融合,线上与线下的互通,正在掀起一股“互联网+”新风潮和创业热潮.支付宝钱包.快的打车.淘点点……这些耳熟能详的应用早已成为人们生活的一部分.而越来越多的“互联网+”创新项目,将 ...
- 【阿里云产品公测】性能测试服务PTS的初步尝试
性能测试服务PTS,对于像我这样对测试毫无概念的新手来说,这服务真的太好了,使用简单,官方教程又明细,连我这样的新手一看都明白了怎样使用. _%GGl$kH 下面是我来简单尝试一下,更多功 ...
- visual studio 2013的C++开发环境不错--vs2013安装试用手记
原文:http://blog.csdn.net/haoyujie/article/details/24370189 从visual studio 体系,最后一次对C++实现了大的改进,那还是vs 7. ...
- arm汇编学习(五)
新增个手写GNU语法arm的方法,以后可以狂逆狂写 hello.S文件 .data msg: .ascii "Hello, ARM!\n" len = . - msg .text ...
- lsqnonlin函数使用方法
非线性最小二乘函数 lsqnonlin 格式x = lsqnonlin(fun,x0) %x0 为初始解向量:fun为,i=1,2,-,m,fun返回向量值F,而不是平方和值,平方和隐含在方法中, ...
- Oracle案例02——ORA-12034: "SCOTT"."USER_TABLE" 上的实体化视图日志比上次刷新后的内容新
最近同事在交接工作时,发现有几个schedule job没有执行成功,我这边给看了下,其中一个是由于数据库迁移,调用dblink的host主机IP在tnsnames中没有变更导致,还有一个是无法视图的 ...
- Wpf 系列
http://www.cnblogs.com/chillsrc/category/684419.html