工作中,遇到同事之前写的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用法的更多相关文章

  1. union内嵌struct用法

      // union内嵌struct用法 // 众所周知,union为联合体,struct为结构体.下面根据实例谈谈用法   #include <stdio.h>   #include & ...

  2. MySQL UNION 与 UNION ALL 语法与用法

    MySQL UNION 语法 MySQL UNION 用于把来自多个 SELECT 语句的结果组合到一个结果集合中.语法为: SELECT column,... FROM table1 UNION [ ...

  3. MySQL全连接(Full Join)实现,union和union all用法

    MySQL本身不支持你所说的full join(全连接),但可以通过union来实现 ,下面是一个简单测试,可以看看: mysql> CREATE TABLE a(id int,name cha ...

  4. mysql union 与 union all 语法及用法

    1.mysql   union  语法 mysql   union 用于把来自多个select  语句的结果组合到一个结果集合中.语法为: select  column,......from tabl ...

  5. union与union all的用法给区别

    用法: 当我们需要把两个或多个sql联合起来查询就用到了union或者union all 区别: 这两者的区别就在于union会自动的把多个sql查出来重复的排除掉,而union all这是会全部显示 ...

  6. ORACLE中union/union all/Intersect/Minus用法

    Union,对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序: Union All,对两个结果集进行并集操作,包括重复行,不进行排序: Intersect,对两个结果集进行交集操作,不包 ...

  7. oracle中union和minus的用法【oracle技术】

    UNION是将两个或者两个以上的搜索结果集合并在一起!这个合并是有条件滴!记录的类型要匹配啦,记录的列数要一样啦!看看下面简单的例子: 有的朋友会说为什么要用union呢,直接用txt3 in ('I ...

  8. 【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 ...

  9. sql中union和union all的用法

    如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字.union(或称为联合)的作用是将多个结果合并在一起显示出来. union和unio ...

随机推荐

  1. 附录D 安装ZooKeeper

    D.1    安装ZooKeeper D.1.1   下载ZooKeeper ZooKeeper是Apache基金会的一个开源.分布式应用程序协调服务,是Google的Chubby一个开源的实现.它是 ...

  2. 【Java心得总结七】Java容器下——Map

    我将容器类库自己平时编程及看书的感受总结成了三篇博文,前两篇分别是:[Java心得总结五]Java容器上——容器初探和[Java心得总结六]Java容器中——Collection,第一篇从宏观整体的角 ...

  3. 魔方渗透系统安装VMtools教程

    虚拟机魔方渗透系统安装VMtools教程 1.开机登陆后,如图点击安装VMtools. 2.进入media文件夹: cd /media   查看mdia文件夹内容: ls   3.打开VMware T ...

  4. Moon.Orm 5.0(MQL版)的高性能,将发言权交给你!

    Moon.Orm 5.0性能问题,我将它交给关心它性能的您,让你自己测试,决不让你失望的. Moon.Orm 5.0 (MQL版) 版本维护及下载 (跟踪发布) Moon.Orm 5.0系列文章 火晋 ...

  5. Win10 UWP系列:更新UWP时注意的问题——TargetDeviceFamily

    前几天把CurrencyExchanger提交到微软参加Master认证,结果没有通过,反馈了一些错误,看来微软检查还是比较仔细的. 错误主要有: Visual feedback helps user ...

  6. customErrors与错误页面

    本配置节相对简单而且常用 <customErrors defaultRedirect="url" mode="On|Off|RemoteOnly"> ...

  7. 浅谈 C#委托

    看了<CLR via C#>的17章委托后,为自己做一点浅显的总结,也分享给需要的人. .NET通过委托来提供一种回调函数机制,.NET委托提供了很多功能,例如确保回调方法是类型安全的(C ...

  8. IIS8 添加配置 WCF服务

    今天在Windows8.1 操作系统部署了半天的WCF 一直老是在报错.在这里做个记录 防止下次忘记 在网上查了半天.终于知道原来IIS8不支持WCF服务SVC的请求.所以必须要给IIS8添加WCF服 ...

  9. C#中AppDomain.CurrentDomain.BaseDirectory及各种路径获取方法

    // 获取程序的基目录.System.AppDomain.CurrentDomain.BaseDirectory // 获取模块的完整路径,包含文件名System.Diagnostics.Proces ...

  10. svn忽略某个文件提交

    svn忽略配置文件提交:TortoiseSVN->Unversion and add to ignore_list (config.php(recursiverly)) 正如官方指南所言:Tor ...