zoukankan      html  css  js  c++  java
  • SQL Server中几个高级查询运算词(UNION, EXCEPT 和 INTERSECT)

    这里主要演示3个运算词,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

    两个表的初始结果如下

     

    非常简单的两个表,列数和列顺序一样. 而数据中有一条数据相同,这里的相同时完全相同,包括主键,我这里的主键是标识列, 所以插入的顺序也一样, 若不是标识列,则随意,只要保证有数据完全一致,就可以说他们是重复的数据, 这样用上面3个运算词才会有效.

    先来看看UNION和UNION ALL

    select * from temptable1
    union
    select * from temptable2

    select * from temptable1
    union all
    select * from temptable2

    有 ALL 关键字是完全整合两个结果集,而无 ALL 是在之前的基础上去重了,所以第一个查询中{id:1, price:3}只会显示一条,结果如下:

     在来看看EXCEPT, 也是去重的, 但是它在去掉两个或多个集合中重复数据的之后, 只会保留第一个结果集中的数据

    select * from temptable1
    except
    select * from temptable2

     

    其实也是查询表A, 看表A的数据在表B中是否存在, 如果存在, 则删掉

    而INTERSECT比较好理解, 就是查询两个结果集的并集, 利用上面的数据,查询到的结果只有一条, 就是{id:1, price:3}, 这里就不给出代码和结果图, 大家可以试试!

  • 相关阅读:
    SpringMVC拦截器使用
    JavaCORBA
    Mybatis各语句高级用法(未完待续)
    [译文]C# Heap(ing) Vs Stack(ing) in .NET: Part II
    [译文]C# Heap(ing) Vs Stack(ing) in .NET: Part I
    iBatis连接MySQL时的注意事项
    MyBatis入门
    属性(property) VS 数据成员(field)
    [译文]C# Heap(ing) Vs Stack(ing) in .NET: Part III
    LINQ To Objects
  • 原文地址:https://www.cnblogs.com/fengxiang/p/1541978.html
Copyright © 2011-2022 走看看