为什么在使用MAX时使用ALL

时间:2016-03-12 00:27:56

标签: sql-server tsql operator-keyword

我刚刚找到了ALL比较运算符。我看到一些像

这样的例子
select ProductId, Price
from tbl1 
where Price > ALL (select Price from tbl2)

当我说a_value is > All (some_other_values)时,我总是可以说a_value > MAX(some_other-values)

所以上面的查询等于

select ProductId, Price
from tbl1 
where Price > (select Max(Price) from tbl2)

那么为什么SQL Server提供了ALL运算符?

1 个答案:

答案 0 :(得分:1)

正如所有运算符的MSDN(从2008年开始的SQL Server)中所提到的,它将标量值与单列值集进行比较。

scalar_expression { = | <> | != | > | >= | !> | < | <= | !< } ALL ( subquery )

例如: -

>ALL 表示大于每个值,表示大于最大值。

所以 >ALL (1, 2, 3) 表示大于3。

类似地,可以在这里更改比较运算符,&amp; < ALL (1, 2, 3) 表示小于1.

ALL 必须以比较运算符开头,如果查询根本没有返回任何行,它还会计算为 TRUE 。< / p>

例如: -

以下OUTER SELECT查询返回除子查询之外的所有行,根本不返回任何行。

;WITH CTE AS (
   SELECT 1 AS 'id'
UNION ALL
   SELECT 1 AS 'id'
UNION ALL
   SELECT 2 AS 'id'
UNION ALL
   SELECT 3 AS 'id'
)
SELECT * FROM CTE WHERE id >ALL ( SELECT id FROM CTE WHERE 1 = 0 )

因此,与在子查询中使用简单MAX相比,这证明它具有不同的行为。