之间的区别是什么
声明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的第二个语句返回第一个语句的超集。(与第一个语句相比,结果更多)我无法弄清楚为什么会这样。
答案 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
中找到了。