2014-11-24 41 views
5

我碰到它使用所有quantor的最大子查询的多个查询传来:“其中x> ALL SELECT MAX” 与 “WHERE X> SELECT MAX”

是否有任何区别

SELECT name FROM bbc 
WHERE population > ALL 
     (SELECT MAX(population) 
      FROM bbc 
     WHERE region = 'Europe') 
    AND region = 'South Asia' 

SELECT name FROM bbc 
WHERE population > 
     (SELECT MAX(population) 
      FROM bbc 
     WHERE region = 'Europe') 
    AND region = 'South Asia' 

回答

4

SELECT MAX是一个聚合操作,因此,你的子查询将选择一行。

ALL应用于单行将不起作用。

如果您的子查询返回多个行,则非ALL版本会导致错误。另请注意,使用ALL时,您可以从子查询中删除MAX,并且您会得到正确的结果(推测具有相同的性能特征)。