Oracle中Union与Union All的区别(适用多个数据库)
Oracle中Union与Union All的区别(适用多个数据库)
如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字。union(或称为联合)的作用是将多个结果合并在一起显示出来
Union 与 Union ALL 的作用都是合并 SELECT 的查询结果集,那么它们有什么不同呢?
Union 将查询到的结果集合并后进行重查,将其中相同的行去除。缺点:效率低;
而Union ALL 则只是合并查询的结果集,并不重新查询,效率高,但是可能会出现冗余数据。
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
Union All:对两个结果集进行并集操作,包括重复行,不进行排序;
Intersect:对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;
Minus:对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。
可以在最后一个结果集中指定Order by子句改变排序方式。
例如:
union
select employee_id,job_id from job_history
以上将两个表的结果联合在一起。这两个例子会将两个select语句的结果中的重复值进行压缩,也就是结果的数据并不是两条结果的条数的和。如果希望即使重复的结果显示出来可以使用union all,例如:
2.在oracle的scott用户中有表emp
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;
转自:http://www.jb51.net/article/30792.htm
本人写的,比较复杂一点的sql(left join union all)
-- 查询基本信息 select * from ( select max(trans_item.BASIC_TERM_ID) BASIC_TERM_ID, trans_item.APP_TERM_NO APP_TERM_NO, max(trans_item.DEVICE_TYPE) DEVICE_TYPE, max(trans_item.MODEL_DESC) MODEL_DESC, max(trans_item.branch_name) branch_name, max(trans_item.sub_name) sub_name, max(trans_item.self_name) self_name, max(trans_item.INST_TYPE) INST_TYPE from( select term.TERMINAL_ID BASIC_TERM_ID, term.APP_TERM_NO APP_TERM_NO, device.DEVICE_TYPE DEVICE_TYPE, model.MODEL_DESC MODEL_DESC, branch.SHORT_NAME branch_name, subbranch.SHORT_NAME sub_name, self.SHORT_NAME self_name, self.INST_TYPE INST_TYPE from SELFCUR.OPS_TERMINAL_INFO term, SELFCUR.OPS_DEVICE_INFO device, SELFCUR.OPS_DEVICE_MODEL model, SELFCUR.OPS_INSTITUTION branch, SELFCUR.OPS_INSTITUTION subbranch, SELFCUR.OPS_INSTITUTION self, SELFCUR.BIZ_MAIN_TRANS trans where trans.TERM_ID=term.APP_TERM_NO and term.TERMINAL_ID=device.TERMINAL_ID and device.MODEL_ID=model.MODEL_ID and term.INST_ID=self.INST_ID and self.PARENT_INST_ID=subbranch.INST_ID and subbranch.PARENT_INST_ID=branch.INST_ID -- 这里需要加入特殊符号来标识,用界面传过来的参数组成sql进行替换 --XXXXYYYY-- union all select term.TERMINAL_ID BASIC_TERM_ID, term.APP_TERM_NO APP_TERM_NO, device.DEVICE_TYPE DEVICE_TYPE, model.MODEL_DESC MODEL_DESC, branch.SHORT_NAME branch_name, subbranch.SHORT_NAME sub_name, self.SHORT_NAME self_name, self.INST_TYPE INST_TYPE from SELFCUR.OPS_TERMINAL_INFO term, SELFCUR.OPS_DEVICE_INFO device, SELFCUR.OPS_DEVICE_MODEL model, SELFCUR.OPS_INSTITUTION branch, SELFCUR.OPS_INSTITUTION subbranch, SELFCUR.OPS_INSTITUTION self, SELFCUR.BIZ_MAIN_TRANS_HIS trans_his where trans_his.TERM_ID=term.APP_TERM_NO and term.TERMINAL_ID=device.TERMINAL_ID and device.MODEL_ID=model.MODEL_ID and term.INST_ID=self.INST_ID and self.PARENT_INST_ID=subbranch.INST_ID and subbranch.PARENT_INST_ID=branch.INST_ID -- 这里需要加入特殊符号来标识,用界面传过来的参数组成sql进行替换 --XXXXYYYY-- )trans_item group by trans_item.APP_TERM_NO )trans_basic left join( -- 联通缴费 select trans_pay_lt.TERM_ID TERM_ID, ) PAY_LT_Count, sum(trans_pay_lt.TRAN_AMT) PAY_LT_Money from( select trans.TERM_ID TERM_ID, trans.TRAN_AMT TRAN_AMT from SELFCUR.BIZ_MAIN_TRANS trans ' ' union all select trans_his.TERM_ID TERM_ID, trans_his.TRAN_AMT TRAN_AMT from SELFCUR.BIZ_MAIN_TRANS_HIS trans_his ' ' ) trans_pay_lt group by trans_pay_lt.TERM_ID )trans_pay_lt_l on trans_basic.APP_TERM_NO=trans_pay_lt_l.TERM_ID left join( -- 移动缴费 select trans_pay_yd.TERM_ID TERM_ID, ) PAY_YD_Count, sum(trans_pay_yd.TRAN_AMT) PAY_YD_Money from( select trans.TERM_ID TERM_ID, trans.TRAN_AMT TRAN_AMT from SELFCUR.BIZ_MAIN_TRANS trans ' ' union all select trans_his.TERM_ID TERM_ID, trans_his.TRAN_AMT TRAN_AMT from SELFCUR.BIZ_MAIN_TRANS_HIS trans_his ' ' ) trans_pay_yd group by trans_pay_yd.TERM_ID )trans_pay_yd_l on trans_basic.APP_TERM_NO=trans_pay_yd_l.TERM_ID left join( -- 查询电信缴费 select trans_pay_dx.TERM_ID TERM_ID, ) PAY_DX_Count, sum(trans_pay_dx.TRAN_AMT) PAY_DX_Money from( select trans.TERM_ID TERM_ID, trans.TRAN_AMT TRAN_AMT from SELFCUR.BIZ_MAIN_TRANS trans ' ' union all select trans_his.TERM_ID TERM_ID, trans_his.TRAN_AMT TRAN_AMT from SELFCUR.BIZ_MAIN_TRANS_HIS trans_his ' ' ) trans_pay_dx group by trans_pay_dx.TERM_ID )trans_pay_dx_l on trans_basic.APP_TERM_NO=trans_pay_dx_l.TERM_ID left join( -- 电力缴费 select trans_pay_dl.TERM_ID TERM_ID, ) PAY_DL_Count, sum(trans_pay_dl.TRAN_AMT) PAY_DL_Money from( select trans.TERM_ID TERM_ID, trans.TRAN_AMT TRAN_AMT from SELFCUR.BIZ_MAIN_TRANS trans ' --重庆电力014 三峡电力 008 ') union all select trans_his.TERM_ID TERM_ID, trans_his.TRAN_AMT TRAN_AMT from SELFCUR.BIZ_MAIN_TRANS_HIS trans_his ' --重庆电力014 三峡电力 008 ') ) trans_pay_dl group by trans_pay_dl.TERM_ID )trans_pay_dl_l on trans_basic.APP_TERM_NO=trans_pay_dl_l.TERM_ID left join( -- 自来水缴费 select trans_pay_zls.TERM_ID TERM_ID, ) PAY_ZLS_Count, sum(trans_pay_zls.TRAN_AMT) PAY_ZLS_Money from( select trans.TERM_ID TERM_ID, trans.TRAN_AMT TRAN_AMT from SELFCUR.BIZ_MAIN_TRANS trans ' --水务2测试 004 水费 005 ') union all select trans_his.TERM_ID TERM_ID, trans_his.TRAN_AMT TRAN_AMT from SELFCUR.BIZ_MAIN_TRANS_HIS trans_his ' --水务2测试 004 水费 005 ') ) trans_pay_zls group by trans_pay_zls.TERM_ID )trans_pay_zls_l on trans_basic.APP_TERM_NO=trans_pay_zls_l.TERM_ID left join( -- 燃气缴费 select trans_pay_rq.TERM_ID TERM_ID, ) PAY_RQ_Count, sum(trans_pay_rq.TRAN_AMT) PAY_RQ_Money from( select trans.TERM_ID TERM_ID, trans.TRAN_AMT TRAN_AMT from SELFCUR.BIZ_MAIN_TRANS trans ' --再生资源 003 ' union all select trans_his.TERM_ID TERM_ID, trans_his.TRAN_AMT TRAN_AMT from SELFCUR.BIZ_MAIN_TRANS_HIS trans_his ' --再生资源 003 ' ) trans_pay_rq group by trans_pay_rq.TERM_ID )trans_pay_rq_l on trans_basic.APP_TERM_NO=trans_pay_rq_l.TERM_ID left join( -- 现金交易 取款 select trans_cash_qk.TERM_ID TERM_ID, ) CASH_QK_Count, sum(trans_cash_qk.TRAN_AMT) CASH_QK_Money from( select trans.TERM_ID TERM_ID, trans.TRAN_AMT TRAN_AMT from SELFCUR.BIZ_MAIN_TRANS trans ' union all select trans_his.TERM_ID TERM_ID, trans_his.TRAN_AMT TRAN_AMT from SELFCUR.BIZ_MAIN_TRANS_HIS trans_his ' ) trans_cash_qk group by trans_cash_qk.TERM_ID )trans_cash_qk_l on trans_basic.APP_TERM_NO=trans_cash_qk_l.TERM_ID left join( -- 现金交易 存款 select trans_cash_ck.TERM_ID TERM_ID, ) CASH_CK_Count, sum(trans_cash_ck.TRAN_AMT) CASH_CK_Money from( select trans.TERM_ID TERM_ID, trans.TRAN_AMT TRAN_AMT from SELFCUR.BIZ_MAIN_TRANS trans ' union all select trans_his.TERM_ID TERM_ID, trans_his.TRAN_AMT TRAN_AMT from SELFCUR.BIZ_MAIN_TRANS_HIS trans_his ' ) trans_cash_ck group by trans_cash_ck.TERM_ID )trans_cash_ck_l on trans_basic.APP_TERM_NO=trans_cash_ck_l.TERM_ID left join( -- 现金交易 查询 --余额查询1011001 查询交易明细1011002 积分查询 1011003 select trans_cash_cx.TERM_ID TERM_ID, ) CASH_CX_Count from( select trans.TERM_ID TERM_ID from SELFCUR.BIZ_MAIN_TRANS trans ' union all select trans_his.TERM_ID TERM_ID from SELFCUR.BIZ_MAIN_TRANS_HIS trans_his ' ) trans_cash_cx group by trans_cash_cx.TERM_ID )trans_cash_cx_l on trans_basic.APP_TERM_NO=trans_cash_cx_l.TERM_ID left join( -- 现金交易 转账 select trans_cash_zh.TERM_ID TERM_ID, ) CASH_ZH_Count, sum(trans_cash_zh.TRAN_AMT) CASH_ZH_Money from( select trans.TERM_ID TERM_ID, trans.TRAN_AMT TRAN_AMT from SELFCUR.BIZ_MAIN_TRANS trans ' union all select trans_his.TERM_ID TERM_ID, trans_his.TRAN_AMT TRAN_AMT from SELFCUR.BIZ_MAIN_TRANS_HIS trans_his ' ) trans_cash_zh group by trans_cash_zh.TERM_ID ) trans_cash_zh_l on trans_basic.APP_TERM_NO=trans_cash_zh_l.TERM_ID left join( -- 补登折 存折 select trans_budeng_cz.TERM_ID TERM_ID, ) BUDENG_CZ_Count from( select trans.TERM_ID TERM_ID from SELFCUR.BIZ_MAIN_TRANS trans ' union all select trans_his.TERM_ID TERM_ID from SELFCUR.BIZ_MAIN_TRANS_HIS trans_his ' ) trans_budeng_cz group by trans_budeng_cz.TERM_ID ) trans_budeng_cz_l on trans_basic.APP_TERM_NO=trans_budeng_cz_l.TERM_ID
Oracle中Union与Union All的区别(适用多个数据库)的更多相关文章
- Oracle中执行存储过程call和exec区别
Oracle中执行存储过程call和exec区别 在sqlplus中这两种方法都可以使用: exec pro_name(参数1..); call pro_name(参数1..); 区别: 1. 但是e ...
- Oracle中Blob和Clob类型的区别与操作
Oracle中Blob和Clob类型 1.Oracle中Blob和Clob类型的区别 BLOB和CLOB都是大字段类型,BLOB是按二进制来存储的,而CLOB是可以直接存储文字的.其实两个是可以互换的 ...
- Oracle中 (+)与left join 的用法区别
Oracle中 (+)与left join 的用法区别 原创 2017年01月11日 13:33:42 6648 select * from a,b where a.id=b.id(+); (+)写在 ...
- Oracle中rank() over, dense_rank(), row_number() 的区别
摘自:http://www.linuxidc.com/Linux/2015-04/116349.htm Oracle 中 rank() over, dense_rank(), row_number() ...
- Oracle中varchar,varchar2,nvarchar,nvarchar2的区别及其它数据类型描述
--varchar,varchar2 联系: 1.varchar/varchar2用于存储可变长度的字符串 比如varchar(20),存入字符串'abc',则数据库中该字段只占3个字节,而不是20个 ...
- oracle中int类型和number类型区别
INT类型是NUMBER类型的子类型.下面简要说明:(1)NUMBER(P,S)该数据类型用于定义数字类型的数据,其中P表示数字的总位数(最大字节个数),而S则表示小数点后面的位数.假设定义SAL列为 ...
- Oracle中Null与空字符串' '的区别
含义解释: 问:什么是NULL? 答:在我们不知道具体有什么数据的时候,也即未知,可以用NULL,我们称它为空,ORACLE中,含有空值的表列长度为零. ORACLE允许任何一种数据类型的字段为空,除 ...
- ORACLE 中rownum和row_number()的使用区别(可指定取sql结果集的第几个数据)
这篇文章主要介绍了oracle中rownum和row_number()的使用方法以及区别和联系,十分的详细,有需要的小伙伴可以参考下. row_number()over(partition by ...
- (转)在oracle中varchar和varchar2有什么区别?
1.varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节: 2.VARCHAR2把空串等同于null处理,而varchar仍 ...
- oracle中floor函数和to_number函数区别
oracle中floor函数没有值默认是0,number函数没有值默认是空
随机推荐
- 运维开发工程师 面试题 shell编程
1. 32位随机密码生成 cat /proc/sys/kernel/random/uuid | tr -d '-' 2.查看当前系统每个ip的tcp连接数 -n 强制显示IP地址 -t 显示TCP连接 ...
- c语言 进程控制---创建进程 vfork()函数
#include "stdio.h" #include "unistd.h" #include "sys/types.h" int gvar ...
- 跨server传输数据注意事项
我们需要模拟客服端 首先导入相关的jar包 文件,Jersey的相关jar包 实现客服端的代码为: @Test public void testClient() { //图片生成 ...
- .Net MVC&&datatables.js&&bootstrap做一个界面的CRUD有多简单
我们在项目开发中,做得最多的可能就是CRUD,那么我们如何在ASP.NET MVC中来做CRUD呢?如果说只是单纯实现功能,那自然是再简单不过了,可是我们要考虑如何来做得比较好维护比较好扩展,如何做得 ...
- VMware Workstation 12 Pro 之安装林耐斯StartOS X64系统
VMware Workstation 12 Pro 之安装林耐斯StartOS X64系统... ---------------- 先去下载系统暗中包ISO 网址:http://www.xiaza ...
- Java中的继承性特性
继承性是java中的第二特性之一.而继承性最为关键的地方为:代码重用性的问题,利用继承性可以从已有的类中继续派生出新的子类,也可以利用子类扩展出更多的操作功能. 继承性的实现代码为:class 子类 ...
- 浅酌iOS 11兼容性
WeTest导读 苹果在WWDC2017大会,公布了最新的iOS 11,系统新特性肯定是让不少果粉充满期待.在网上已能看到不少关于iOS 11的体验文章,那么iOS 11的新特性会对APP产生什么兼容 ...
- TF-IDF模型详解
1. 理论基础 由于数据挖掘所有数据都要以数字形式存在,而文本是以字符串形式存在.所以进行文本挖掘时需要先对字符串进行数字化,从而能够进行计算.TF-IDF就是这样一种技术,能够将字符串转换为数字,从 ...
- Java并发包中CopyOnWrite容器相关类简介
简介: 本文是主要介绍,并发容器CopyOnWriteArrayList和CopyOnWriteArraySet(不含重复元素的并发容器)的基本原理和使用示例. 欢迎探讨,如有错误敬请指正 如需转载, ...
- JavaWeb(八)JQuery
jQuery 市场用得比较多两个框架: jQuery 比较适合做一些互联网 的应用(12306.com,蘑菇街,美丽说,聚美) extjs 比较适合做后台管理系统(电商(订单管理),银行,电信) 核心 ...