工作中,遇到同事之前写的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. Android测试提升效率批处理脚本

    前言: APP测试过程中,经常需要用的一些命令,如adb,每次敲命令,虽可以加深印象,但个人认为那即繁琐又浪费时间.本文贴出一些我使用的批处理,以及一点点小小技巧. 目录 1.[查看APK文件信息.b ...

  2. CloudNotes之桌面客户端篇:增强的笔记列表

    今天,我发布了CloudNotes的一个更新版本:1.0.5484.36793.这个版本与1.0.5472.20097不同的是,它拥有增强的笔记列表,与之前单调的列表系统相比,新的笔记列表不仅可以显示 ...

  3. 移动端click事件延迟300ms问题

    因为历史原因,移动端点击事件会有300ms延迟,来判断用户是连续双击缩放还是点击跳转.即如果300ms内连续点击两次,则会理解为对页面进行缩放操作(当然前提是移动端页面设置为可缩放的):在一次点击之后 ...

  4. Windows Service--Write a Better Windows Service

    原文地址: http://visualstudiomagazine.com/Articles/2005/10/01/Write-a-Better-Windows-Service.aspx?Page=1 ...

  5. jQuery获取及设置单选框、多选框、文本框内容

    获取一组radio被选中项的值 var item = $('input[@name=items][@checked]').val(); 获取select被选中项的文本 var item = $(&qu ...

  6. How do I see all foreign keys to a table or column?

    down voteaccepted For a Table: SELECT TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, REFERENCED_TABLE_NAME, ...

  7. 数据结构:链表(python版)续:带有尾节点引用的单链表

    #!/usr/bin/env python # -*- coding:utf-8 -*- from chapter3.single_linked_list import LNode,LinkedLis ...

  8. 《数据结构与算法Python语言描述》习题第二章第二题(python版)

    ADT Date: #定义日期对象的抽象数据类型 Date(self, int year, int month, int day) #构造表示year/month/day的对象 difference( ...

  9. JAVA 异常处理机制

    主要讲述几点: 一.异常的简介 二.异常处理流程 三.运行时异常和非运行时异常 四.throws和throw关键字 一.异常简介 异常处理是在程序运行之中出现的情况,例如除数为零.异常类(Except ...

  10. Spring学习系列(二) 自动化装配Bean

    一.Spring装配-自动化装配 @Component和@ComponentScan 通过spring注解(@Component)来表明该类会作为组件类,并告知Spring要为这类创建bean,不过组 ...