union和union all用法
工作中,遇到同事之前写的oracle语句中有一个union all,并且很多地方都用到了。便在网上查了一下用法,以下是自己的理解。
union (联合)将两个或者多个结果集合并。
在使用时,两个结果集要有相同的列,并且字段类型需要一致。
select id,name from tableA
union all
select name from tableB
消息 205,级别 16,状态 1,第 1 行
使用 UNION、INTERSECT 或 EXCEPT 运算符合并的所有查询必须在其目标列表中有相同数目的表达式。
union 和union all 的区别;
union会去除结果集中重复的部分,相当于进行一个distinct(去重),并且union 会自带排序功能;
union all 会不管是否重复,都会将结果合并在一起输出,没有排序功能,只是结果集的堆叠输出。
tableA
id name score
1 a 80
2 b 79
3 c 68
tableB
id name score
1 d 48
2 e 23
3 c 86
使用union
1、 结果如下:name
select name from tableA a
union b
select name from tableB c
d
e
我们运行
select id,name from tableA
union
select id,name from tableB
结果如下:
id name
1 a
1 d
2 b
2 e
3 c
两个表中都有 3 c ,使用union时只输出一次。
并且我们会发现,union会按照第一列进行默认排序。
使用union all
1、
select name from tableA
union all
select name from tableB
结果:
name
a
b
c
d
e
c
2、
select id,name from tableA
union all
select id,name from tableB
结果如下:
id name
1 a
2 b
3 c
1 d
2 e
3 c
从结果看到,两个union all 结果差别只是在于是否输出id 其输出顺序,为 tableA所有记录紧接tableB所有记录,因此说union all非排序输出。
上边的用法应该在很多地方都可以查到吧。
下面说一下我遇到的问题。
在业务中需要查询两列,两个不同的列从两个表中获取。
select
t.d day_id,
sum(t.OWN_COST) own_cost,
sum(t.cishu) cishu
from
(
select
to_char(f.riqi,'yyyy-mm-dd')d ,
sum(nvl(f.feiyong1, 0))
+ sum(nvl(f.feiyong2, 0)) OWN_COST,--金额
0 cishu
from tablea t ,tableb f
where
t.liushuihao=f.liushuihao group by to_char(f.ji_fei_rq ,'yyyy-mm-dd') union all SELECT
to_char(jiaoyiriqi ,'yyyy-mm-dd') d,
0 OWN_COST,
COUNT(case
when JIAO_YI_LX = 1 then --【交易类型,1正交易,2反交易】
1
end) - COUNT(case
when JIAO_YI_LX = 2 then --【交易类型,1正交易,2反交易】
1
end) cishu
FROM tablea group by to_char(jiaoyiriqi,'yyyy-mm-dd')
)t
group by t.d
以上代码看到两个子查询中都有次数和金额。当子查询计算金额的时候,设置默认的此时为0 (0 次数);当计算次数的时候,设置金额为0 (0 own_cost)。
这样写的好处:
1、当次数有问题时,我们只需要查看计算次数的子查询部分,同理,金额错误时我们只需要查看相关代码就可以。
2、在子查询中,设置不进行计算的值为0,对于运算结果并不会产生影响。
以上是本人对union的浅显理解,欢迎各位大神指导。
union和union all用法的更多相关文章
- union内嵌struct用法
// union内嵌struct用法 // 众所周知,union为联合体,struct为结构体.下面根据实例谈谈用法 #include <stdio.h> #include & ...
- MySQL UNION 与 UNION ALL 语法与用法
MySQL UNION 语法 MySQL UNION 用于把来自多个 SELECT 语句的结果组合到一个结果集合中.语法为: SELECT column,... FROM table1 UNION [ ...
- MySQL全连接(Full Join)实现,union和union all用法
MySQL本身不支持你所说的full join(全连接),但可以通过union来实现 ,下面是一个简单测试,可以看看: mysql> CREATE TABLE a(id int,name cha ...
- mysql union 与 union all 语法及用法
1.mysql union 语法 mysql union 用于把来自多个select 语句的结果组合到一个结果集合中.语法为: select column,......from tabl ...
- union与union all的用法给区别
用法: 当我们需要把两个或多个sql联合起来查询就用到了union或者union all 区别: 这两者的区别就在于union会自动的把多个sql查出来重复的排除掉,而union all这是会全部显示 ...
- ORACLE中union/union all/Intersect/Minus用法
Union,对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序: Union All,对两个结果集进行并集操作,包括重复行,不进行排序: Intersect,对两个结果集进行交集操作,不包 ...
- oracle中union和minus的用法【oracle技术】
UNION是将两个或者两个以上的搜索结果集合并在一起!这个合并是有条件滴!记录的类型要匹配啦,记录的列数要一样啦!看看下面简单的例子: 有的朋友会说为什么要用union呢,直接用txt3 in ('I ...
- 【oracle】union、union all、intersect、minus 的用法及区别
一.union与union all 首先建两个view create or replace view test_view_1 as as c from dual union as c from dua ...
- sql中union和union all的用法
如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字.union(或称为联合)的作用是将多个结果合并在一起显示出来. union和unio ...
随机推荐
- 附录D 安装ZooKeeper
D.1 安装ZooKeeper D.1.1 下载ZooKeeper ZooKeeper是Apache基金会的一个开源.分布式应用程序协调服务,是Google的Chubby一个开源的实现.它是 ...
- 【Java心得总结七】Java容器下——Map
我将容器类库自己平时编程及看书的感受总结成了三篇博文,前两篇分别是:[Java心得总结五]Java容器上——容器初探和[Java心得总结六]Java容器中——Collection,第一篇从宏观整体的角 ...
- 魔方渗透系统安装VMtools教程
虚拟机魔方渗透系统安装VMtools教程 1.开机登陆后,如图点击安装VMtools. 2.进入media文件夹: cd /media 查看mdia文件夹内容: ls 3.打开VMware T ...
- Moon.Orm 5.0(MQL版)的高性能,将发言权交给你!
Moon.Orm 5.0性能问题,我将它交给关心它性能的您,让你自己测试,决不让你失望的. Moon.Orm 5.0 (MQL版) 版本维护及下载 (跟踪发布) Moon.Orm 5.0系列文章 火晋 ...
- Win10 UWP系列:更新UWP时注意的问题——TargetDeviceFamily
前几天把CurrencyExchanger提交到微软参加Master认证,结果没有通过,反馈了一些错误,看来微软检查还是比较仔细的. 错误主要有: Visual feedback helps user ...
- customErrors与错误页面
本配置节相对简单而且常用 <customErrors defaultRedirect="url" mode="On|Off|RemoteOnly"> ...
- 浅谈 C#委托
看了<CLR via C#>的17章委托后,为自己做一点浅显的总结,也分享给需要的人. .NET通过委托来提供一种回调函数机制,.NET委托提供了很多功能,例如确保回调方法是类型安全的(C ...
- IIS8 添加配置 WCF服务
今天在Windows8.1 操作系统部署了半天的WCF 一直老是在报错.在这里做个记录 防止下次忘记 在网上查了半天.终于知道原来IIS8不支持WCF服务SVC的请求.所以必须要给IIS8添加WCF服 ...
- C#中AppDomain.CurrentDomain.BaseDirectory及各种路径获取方法
// 获取程序的基目录.System.AppDomain.CurrentDomain.BaseDirectory // 获取模块的完整路径,包含文件名System.Diagnostics.Proces ...
- svn忽略某个文件提交
svn忽略配置文件提交:TortoiseSVN->Unversion and add to ignore_list (config.php(recursiverly)) 正如官方指南所言:Tor ...