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 ...
随机推荐
- ZOJ Problem Set - 1109 Language of FatMouse
这道题目最让人头疼的就是该题的input怎么结束,因为它要求输入一个空行的时候则一串字符串输入结束,这就不得不让人绕个弯来解决这个问题. (注:本人习惯于使用C中的字符串操作,但是用到map要求使用s ...
- Cesium应用篇:1快速搭建
范例中所有范例可以在Github中搜索:ExamplesforCesium Cesium ['siːzɪəm]是一款开源的JavaScript开源库,开发者通过Cesium,实现无插件的创建三维球和二 ...
- Extjs4.0以上版本智能提示的方法
最近,公司的BS项目要用Extjs,本屌学过JavaScript..和Jquery Easy UI ,Jquery..可这个Extjs完全没接触过..可公司项目进度不能掉..只有苦心学习,终于写了点 ...
- java删除文件夹
想删除本地一个项目目录,结果windows说路径太长,不能删除.于是试了试java删除.一切ok.以后一定要抓紧时间学python. /** * Created by rmiao on 4/21/20 ...
- Microsoft Visual Studio 插件
AnkhSVN BatchFormat CodeMaind Nuget Package Manager
- MySQL常用SQL总结
1. 常见命令 连接本地数据库与远程数据库(172.16.xx.xx:3306): mysql -h localhost -u root -p123 mysql -h 172.16.xx.xx -P ...
- 深入剖析tomcat之一个简单的servlet容器
上一篇,我们讲解了如果开发一个简单的Http服务器,这一篇,我们扩展一下,让我们的服务器具备servlet的解析功能. 简单介绍下Servlet接口 如果我们想要自定义一个Servlet,那么我们必须 ...
- react入门(2)
接着上一次的讲,如果没有看过上一篇文章的小伙伴可以先看一下http://www.cnblogs.com/sakurayeah/p/5807821.html React事件 可以先看一下官网讲解的内容h ...
- Hibernate —— Entity.hbm.xml
一.简述 1.对象关系映射文件,用于映射实体类和关系数据库数据表之间的一个 xml 文件. 2.通过 Entity.hbm.xml 映射文件,Hibernate 可以理解持久化类和数据表之间的对应关系 ...
- 详解Javascript的继承实现(二)
上文<详解Javascript的继承实现>介绍了一个通用的继承库,基于该库,可以快速构建带继承关系和静态成员的javascript类,好使用也好理解,额外的好处是,如果所有类都用这种库来构 ...