文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Intersect, Except, Union, All and Any(1)

Intersect, Except, Union, All and Any(1)

时间:2010-11-14  来源:alen88

-注:本文为意译,对原文进行了一些改变 在我浏览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
view source print?
01 select  
02     C.CustomerID  
03 from  
04     Sales.Customer as C  
05     left join  
06     Sales.SalesOrderHeader as OH  
07     on  
08         C.CustomerID = OH.CustomerID  
09         and  
10         OrderDate >= '2004-07-01' 
11 where  
12     OH.CustomerID is null 
13     and  
14     C.TerritoryID = 10;
生成的执行计划如下: Subtree Cost: 0.615925 2. 使用NOT IN
01 select  
02     CustomerID  
03 from  
04     Sales.Customer  
05 where  
06     TerritoryID=10  
07     and  
08     CustomerID   
09         not in 
10         (  
11             select customerid  
12             from  Sales.SalesOrderHeader  
13             where OrderDate>='2004-07-01'   
14         )
生成的执行计划如下:   Subtree Cost: 0.614287 3. 使用EXCEPT谓词
01 select  
02     CustomerID  
03 from  
04     Sales.Customer  
05 where  
06     TerritoryID = 10  
07 EXCEPT  
08 select  
09     customerid  
10 from  
11     Sales.SalesOrderHeader  
12 where  
13     OrderDate >= '2004-07-01'
  生成的执行计划如下:   Subtree Cost: 0.614287 使用EXCEPT谓词和使用NOT IN的子树成本相同,且执行计划也相同。
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载