sql> = All和MAX之间的差异

时间:2015-02-27 05:50:28

标签: sql oracle

之间的区别是什么

声明1:

SELECT continent, name, area FROM world x
  WHERE x.area >= ALL
    (SELECT y.area FROM world y
    WHERE y.continent=x.continent)

声明2:

SELECT continent,name,area FROM world x
WHERE x.area =(SELECT MAX(y.area) FROM world y
WHERE y.continent=x.continent)

它似乎给了我不同的结果,如下所示。

声明1: http://s8.postimg.org/6t8588cz9/ss1.jpg

对于陈述2: http://s4.postimg.org/5lfo10xul/ss2.jpg

Isn< t> = ALL在逻辑上等同于SELECT MAX()?

使用MAX的第二个语句返回第一个语句的超集。(与第一个语句相比,结果更多)我无法弄清楚为什么会这样。

2 个答案:

答案 0 :(得分:3)

这个特定数据集的问题在于一些大陆如“非洲”和“非洲”等。和'欧洲'有区域的空数据(例如欧洲的荷兰)

在第一个查询中添加区域> 0,您应该会看到相同的结果

SELECT continent, name, area FROM world x
  WHERE x.area >= ALL
    (SELECT y.area FROM world y
    WHERE y.continent=x.continent and area>0)

答案 1 :(得分:2)

一个重要的区别是

x = (select max(y) ...)

仅当x 完全等于最大y时才会成立,因此必须在x中找到y,但< / p>

x >= all (select y ...)

x的任何值大于(或等于)y的所有值,

都是如此,因此x可能不在y中找到了