這是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。你有一個相關的子查詢。 –