这是sqlzoo.net这个自我如何加入工作?
下面是表世界的一个问题:
+-------------+-----------+---------+ | name | continent | area | +-------------+-----------+---------+ | Afghanistan | Asia | 652230 | | Albania | Europe | 2831741 | | Algeria | Africa | 28748 | | ... | ... | ... | +-------------+-----------+---------+
问题:
在每个大洲查找最多的国家(按面积),显示大陆,名称和区域:
我想了解答案是:
SELECT continent, name, area
FROM world x
WHERE area >= ALL (SELECT area
FROM world y
WHERE y.continent=x.continent
AND area>0)
该代码给出:
+-------------+-----------+--------+ | continent | name | area | +-------------+-----------+--------+ |Africa | Algeria | 2381741| |Oceania | Australia | 7692024| |South America| Brazil | 8515767| |North America| Canada | 9984670| |Asia | China | 9596961| |Caribbean | Cuba | 109884| |Europe | France | 640679| |Eurasia | Russia |17125242| +-------------+-----------+--------+
我不明白这是如何工作。我认为内部选择应该产生一个包含所有区域的表格,并且外部选择只选择最大的(>=
)。但是,它是如何过滤到似乎是由大陆组成的列表? y.continent=x.continent AND area>0
如何工作?
查询中没有JOIN。你有一个相关的子查询。 –