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 ...
随机推荐
- 1Z0-053 争议题目解析699
1Z0-053 争议题目解析699 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 699.Your database is using a default temporary ta ...
- 「UI 测试自动化selenium」汇总
<selenium 基础之java实现> selenium RC 环境配置 菜鸟学自动化测试(一)----selenium IDE 菜鸟学自动化测试(二)----selenium IDE ...
- 使用OAuth打造webapi认证服务供自己的客户端使用
一.什么是OAuth OAuth是一个关于授权(Authorization)的开放网络标准,目前的版本是2.0版.注意是Authorization(授权),而不是Authentication(认证). ...
- SQL Server 通过重建方式还原 master 数据库
1,备份master数据库 2,停止服务,直接删除master数据文件 3,用安装程序重建master数据文件 控制台下进入安装目录就不说了 D:\SetUp\sqlserver2012>Set ...
- C中的fseek函数使用
函数名:fseek函数 头文件:#include<stdio.h> 功能:把与fp有关的文件位置指针放到一个指定位置. 格式: int fseek(FILE *stream, long ...
- Linux process vs thread
Linux process vs thread Question I have a query related to the implementation of threads in Linux. L ...
- chrome浏览器的跨域设置——包括版本49前后两种设置
做前后分离的webapp开发的时候,出于一些原因往往需要将浏览器设置成支持跨域的模式,好在chrome浏览器就是支持可跨域的设置,网上也有很多chrome跨域设置教程.但是新版本的chrome浏览器提 ...
- kafka配置参数
Kafka为broker,producer和consumer提供了很多的配置参数. 了解并理解这些配置参数对于我们使用kafka是非常重要的.本文列出了一些重要的配置参数. 官方的文档 Configu ...
- Windows下程序启动时出现0xc000007b错误的解决方案
一.背景介绍 不久前用Qt开发了一款小工具在公司使用,Debug运行时一切正常.可是当Release编译发布打包之后,运行时弹出这样的提示框: 略一思考,首先排除了DLL缺失的可能性.我知道Qt应用程 ...
- C#开发微信门户及应用(41)--基于微信开放平台的扫码登录处理
在现今很多网站里面,都使用了微信开放平台的扫码登录认证处理,这样做相当于把身份认证交给较为权威的第三方进行认证,在应用网站里面可以不需要存储用户的密码了.本篇介绍如何基于微信开放平台的扫码进行网站的登 ...