zoukankan      html  css  js  c++  java
  • SQL于union, EXCEPT 和 INTERSECT用法

    这三个放在一起是有道理的,因为它们运行两个或两个以上的结果集,而这些结果对例如设置以下限制:
    列的数目和所有查询必须是相同的列顺序. 
    数据类型必须兼容. 
    而且它们都是处理于多个结果集中有反复数据的问题
    首先还是创建測试环境
    use tempdb
    create table tempTable1 (id int primary key identity, price int)
    create table tempTable2 (id int primary key identity, price int)
    insert into tempTable1 select 3 union all select 1 union all select 2 union all select 3 
    insert into tempTable2 select 3 union all select 4 union all select 1 union all select 2
    select * from temptable1
    select * from temptable2
     
    两个表的初始结果例如以下
     
    很easy的两个表,列数和列顺序一样. 而数据中有一条数据同样,这里的同样时全然同样,包含主键,我这里的主键是标识列, 所以插入的顺序也一样, 若不是标识列,则任意,仅仅要保证有数据全然一致,就能够说他们是反复的数据, 这样用上面3个运算词才会有效.
    先来看看UNION和UNION ALL
    select * from temptable1
    union
    select * from temptable2
    select * from temptable1
    union all
    select * from temptable2
     
    有 ALL keyword是全然整合两个结果集,而无 ALL 是在之前的基础上去重了,所以第一个查询中{id:1, price:3}仅仅会显示一条,结果例如以下:
     
     
     在来看看EXCEPT, 也是去重的, 可是它在去掉两个或多个集合中反复数据的之后, 仅仅会保留第一个结果集中的数据
    select * from temptable1
    except
    select * from temptable2
     
     
     
    事实上也是查询表A, 看表A的数据在表B中是否存在, 假设存在, 则删掉
    而INTERSECT比較好理解, 就是查询两个结果集的并集, 使用上述数据,查询的结果,以仅具有一个, 那是,{id:1, price:3}

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    从V$SQL_PLAN中FORMAT执行计划
    使用 vmstat 监测系统性能
    aix 计算性内存和文件内存
    AIX 配置vncserver
    批量杀进程——xargs用途
    Aix命令大全
    linux查看文件个数命令
    查看Unix系统是32位还是64位
    UTF-8与UTF-8 BOM
    jdk1.9之前版本及jdk9安装配置环境变量
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4839965.html
Copyright © 2011-2022 走看看