好吧,this one(3a;提供答案的样本问题)让我摸不着头脑:
bbc(姓名,地区,地区,人口,国内生产总值)
3A。找到每个地区最大的国家:
SELECT region, name, population
FROM bbc x
WHERE population >= ALL
(SELECT population
FROM bbc y
WHERE y.region = x.region
AND population > 0)
当我考虑数据库引擎循环表条目并将每个x.region与当前y.region(在嵌套SELECT中)匹配时,我理解'WHERE y.region = x.region
'的概念。 ..但wtf确实'AND population > 0
'吗?没有它,这不是一个正确的答案,但我不知道怎么没有......
答案 0 :(得分:2)
我在这里推测它。
如果特定区域的所有记录的总体为空,该怎么办?
编辑:它可以被视为一种安全网,可以忽略人口中的-ve值(不是现实生活场景)。
答案 1 :(得分:2)
那个子句只是因为在欧洲表(对于梵蒂冈)中有一个条目,在填充列中有NULL。以下作品也是我认为更容易理解的:
SELECT region, name, population
FROM bbc x
WHERE population >= ALL
(SELECT population
FROM bbc y
WHERE y.region = x.region
AND population IS NOT NULL)
在MySQL documentation for ALL subqueries中,有一条有用的评论(强调他们的评论):
通常,包含 NULL 值和空表的表是“边缘情况”。在编写子查询代码时,请始终考虑是否考虑了这两种可能性。