zoukankan      html  css  js  c++  java
  • sql sever 两数据表差异比较EXCEPT、INTERSECT

    1、概念:

        EXCEPT主要是用来获取两个结果集的差;两个结果用EXCEPT链接,返回第一个结果集不在第二个结果集中的数据。  

        INTERSECT主要是用来获取两个结果集的交集;两个结果用INTERSECT链接,返回两个结果集中的相同部分

    2、条件:

    (1)所有查询中的列数和列的顺序必须相同。
    (2)比较的两个查询结果集中的列数据类型可以不同但必须兼容。
    (3)比较的两个查询结果集中不能包含不可比较的数据类型(xml、text、ntext、image 或非二进制 CLR 用户定义类型)的列。
    (4)返回的结果集的列名与操作数左侧的查询返回的列名相同。ORDER BY 子句中的列名或别名必须引用左侧查询返回的列名。
    (5)不能与 COMPUTE 和 COMPUTE BY 子句一起使用。
    (6)通过比较行来确定非重复值时,两个 NULL 值被视为相等。(EXCEPT 或 INTERSECT 返回的结果集中的任何列的为空性与操作数左侧的查询返回的对应列的为空性相同。)

    3、Except等效于:

        查询结果上EXCEPT = NOT EXISTS,INTERSECT = EXISTS,但是EXCEPT / INTERSECT的「查询开销」会比NOT EXISTS / EXISTS大很多。except自动去重复,not in / not exists不会。

    4、实例:

        --测试数据
        if not object_id(N'Tempdb..#T1') is null
        drop table #T1
        Go
        Create table #T1([Name] nvarchar(22))
        Insert #T1
        select N'张三' union all
        select N'李四'
        GO
        if not object_id(N'Tempdb..#T2') is null
        drop table #T2
        Go
        Create table #T2([Name] nvarchar(22))
        Insert #T2
        select N'张三' union all
        select N'王五'
        Go
        --测试数据结束
      --------------------- 

     EXCEPT的用法如下:

        SELECT * FROM #T1
        EXCEPT
        SELECT * FROM #T2

        结果返回了#T1表中存在而#T2表中不存在的“李四”:

         

     INTERSECT的用法:

        SELECT * FROM #T1
        INTERSECT
        SELECT * FROM #T2
         结果返回了两个表中都有的张三:

        

  • 相关阅读:
    用Intellij idea创建Maven项目JDK8源码阅读环境问题整理
    咱的Maven项目能用Junit5吗?
    43- 8 mvc知识点
    42-7 linq
    (Ant编程) Iqueryable 类型介绍
    Iqueryable 类型中 的 使用lambda 注意的坑。 (linq to sql)
    (Ant编程) Linq 的select 方法
    Scala模式匹配
    scala正则表达式
    P4336 [SHOI2016]黑暗前的幻想乡
  • 原文地址:https://www.cnblogs.com/yclizq/p/11196205.html
Copyright © 2011-2022 走看看