Intersect, Except, Union, All and Any(3)
2013-04-25 17:06
387 查看
谓词ANY和ALL,我从不需要使用
1.ANY
以下两个query会返回相同的结果和执行计划
?
?
为了演示ANY谓词的实际使用场景,我们使用如下代码在AdventureWorks库中创建一张新表Sales.TopSales
?
我们来获得超过Sales.TopSales表中最小TotalDue的SalesOrderHeader记录
?
生成的执行计划如下:
其SubtreeCost:3.47018
使用另一种方法实现相同逻辑
?
生成的执行计划如下:
其SubtreeCost:1.24078
2.ALL
谓词ALL允许对一个SELECT结果列表中的所有值进行比较。以下两个查询是逻辑对等的。
?
两个查询所生成的执行计划如下,有着明显的不同之处
使用ALL谓词的query的SubtreeCost:3.46994
其等价query的SubtreeCost:1.24078
对于试用ANY和ALL得到的结论
从以上的实验中没有看出使用ANY或ALL谓词在性能方面的好处,可能使用这两个谓词的唯一目的是为了方便。
1.ANY
以下两个query会返回相同的结果和执行计划
12345678910111213 | select * from Sales.SalesPerson where TerritoryID= ANY ( select TerritoryID from Sales.SalesTerritory where CountryRegionCode= 'US' ) select * from Sales.SalesPerson where TerritoryID in ( select TerritoryID from Sales.SalesTerritory where CountryRegionCode= 'US' ) |
1 |
1234567891011121314 | select top 5 SalesOrderID, TotalDue into Sales.TopSales from Sales.SalesOrderHeader order by TotalDue desc alter table Sales.TopSales add constraint PK_TopSales primary key clustered(SalesOrderID) create index idx_TopSales_TotalDue on Sales.TopSales(TotalDue desc ) |
12345678 | select * from Sales.SalesOrderHeader where TotalDue> ANY ( select TotalDue from Sales.TopSales) order by TotalDue desc |
其SubtreeCost:3.47018
使用另一种方法实现相同逻辑
12345678 | select * from Sales.SalesOrderHeader where TotalDue>( select min (TotalDue) from Sales.TopSales) order by TotalDue desc |
其SubtreeCost:1.24078
2.ALL
谓词ALL允许对一个SELECT结果列表中的所有值进行比较。以下两个查询是逻辑对等的。
1234567891011121314151617 | select * from Sales.SalesOrderHeader where TotalDue> ALL ( select TotalDue from Sales.TopSales) order by TotalDue desc select * from Sales.SalesOrderHeader where TotalDue>( select max (TotalDue) from Sales.TopSales) order by TotalDue desc |
使用ALL谓词的query的SubtreeCost:3.46994
其等价query的SubtreeCost:1.24078
对于试用ANY和ALL得到的结论
从以上的实验中没有看出使用ANY或ALL谓词在性能方面的好处,可能使用这两个谓词的唯一目的是为了方便。
相关文章推荐
- Intersect, Except, Union, All and Any(2)
- Intersect, Except, Union, All and Any(3)
- Intersect, Except, Union, All and Any(1)
- Intersect, Except, Union, All and Any(1)
- Intersect, Except, Union, All and Any(2)
- Intersect, Except, Union, All and Any(1)
- Intersect, Except, Union, All and Any(2)
- Linq无聊练习系列6--Any/All/Contains/Concat/Union/Intersect/Except/take/skip/SqlMethods操作练习
- DB2 EXCEPT INTERSECT UNION UNION ALL
- Using UNION, EXCEPT and INTERSECT with Other Transact-SQL Statements
- T-SQL Part X: UNION, EXCEPT and INTERSECT
- SAP HANA 集合操作 UNION/Union all/INTERSECT/EXCEPT (SAP HANA Set Operations)
- 行、重复-SAP HANA 集合操作 UNION/Union all/INTERSECT/EXCEPT (SAP HANA Set Operations)-by小雨
- ORACLE中MINUS,INTERSECT和UNION ALL图解
- 步步为营VS 2008 + .NET 3.5(6) - LINQ查询操作符之Distinct、Union、Concat、Intersect、Except、Skip、Take、SkipWhile、TakeWhile、Single、SingleOrDefault、Reverse、SelectMany
- 深入SQL SERVER合并相关操作Union,Except,Intersect的详解
- 步步为营VS 2008 + .NET 3.5(6) - LINQ查询操作符之Distinct、Union、Concat、Intersect、Except、Skip、Take、SkipWhile、TakeWhile、Single、SingleOrDefaul
- LINQ体验(8)--LINQ to SQL语句之Union All/Union/Intersect和Top/Bottom和P...
- MYSQL UNION AND UNION ALL 的区别!
- LINQ标准查询操作符(三)——Aggregate、Average、Distinct、Except、Intersect、Union、Empty、DefaultIfEmpty、Range、Repeat