zoukankan      html  css  js  c++  java
  • Intersect, Except, Union, All and Any(1)

    在我浏览SQL Server 2008的培训课程时,发现了一些我在平日不太使用的SQL谓词:

    • Intersect
    • Except
    • ALL
    • ANY

    我们将在AdventureWorks示例库上,试用这些谓词。

    首先我们来看INTERSECT,EXCEPT,UNION

    在实验中,我们将使用CustomerID的以下2个集合

    • 在sales territory 10(United Kingdom)中的客户
    • 在‘2004-07-01’后生成的订单

    可能解释这三个谓词的最好方法是通过示意图,最上方的图表示在英国(UK)但未在2004-07-01后产生订单的客户,中间的图表示在英国且在2004-07-01后产生订单的客户,最下方的图标是在英国或在2004-07-01后产生订单的客户。

    下面我们会来看看用不同的方式来实现EXCEPT逻辑

    1
    1.使用left join
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    select  
        C.CustomerID  
    from  
        Sales.Customer as C  
        left join  
        Sales.SalesOrderHeader as OH  
        on  
            C.CustomerID = OH.CustomerID  
            and  
            OrderDate >= '2004-07-01' 
    where  
        OH.CustomerID is null 
        and  
        C.TerritoryID = 10;

    生成的执行计划如下:

     

    Subtree Cost: 0.615925

    2. 使用NOT IN

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    select  
        CustomerID  
    from  
        Sales.Customer  
    where  
        TerritoryID=10  
        and  
        CustomerID   
            not in 
            (  
                select customerid  
                from  Sales.SalesOrderHeader  
                where OrderDate>='2004-07-01'   
            )

     

    生成的执行计划如下:

     

    Subtree Cost: 0.614287

    3. 使用EXCEPT谓词

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select  
        CustomerID  
    from  
        Sales.Customer  
    where  
        TerritoryID = 10  
    EXCEPT  
    select  
        customerid  
    from  
        Sales.SalesOrderHeader  
    where  
        OrderDate >= '2004-07-01'

     

    生成的执行计划如下:

     

    Subtree Cost: 0.614287

    使用EXCEPT谓词和使用NOT IN的子树成本相同,且执行计划也相同。

  • 相关阅读:
    php 按照中文字母名字排序,并把相应的头像显示出来
    小程序单图上传到服务器
    小程序上传图片多图上传
    php 截取 小程序上传到服务器图片,
    小程序选中传值过去 不选中默认第一个
    小程序数据放入全局变量可以使用
    小程序用户openid设置放缓存
    小程序计算两者商家与用户之间的距离
    微擎小程序上传图片
    小程序获取用户的地理位置与商家的相距距离
  • 原文地址:https://www.cnblogs.com/cxd4321/p/3042878.html
Copyright © 2011-2022 走看看