我刚刚开始了一个sql练习风格的教程,但是我仍然没有掌握相关查询的概念。 名称,区域和大洲是表格上的字段。
查询是查找每个大洲中最大的国家(按区域),显示大洲,名称和区域。
到目前为止的工作草案:
SELECT continent, name, population FROM world x
WHERE area >= ALL
(SELECT area FROM world y
WHERE y.continent=x.continent
AND population>0)
尝试在其他一些博客上阅读它。 需要了解相关查询背后的逻辑。
答案 0 :(得分:0)
我假设您发布的查询工作正常。您只需要澄清它的作用即可。
SELECT continent, name, population
FROM world x
WHERE area >= ALL (
SELECT area FROM world y
WHERE y.continent=x.continent
AND population>0
)
查询翻译为
"Get the continent, name, and population of a country where area is bigger than or equal to all other countries in the same continent"
。
内部查询中的WHERE
子句用于链接两个查询(在这种情况下,位于同一大洲的国家/地区)。没有WHERE
,它将使世界上拥有最多的国家。
答案 1 :(得分:0)
您可以将相关子查询视为循环机制。这不一定是如何实现的,但是它描述了它的作用。
考虑以下数据:
row continent area population
1 a 100 19
2 a 200 10
3 a 300 20
4 b 15 2000
外部查询遍历每一行。然后,它查看所有匹配的行。因此,它需要记录1:
row continent area population
1 a 100 19
然后运行子查询:
(SELECT w2.area
FROM world w2
WHERE w2.continent = w.continent AND
w2.population > 0
)
并替换外部表中的值:
(SELECT w2.area
FROM world w2
WHERE w2.continent = 'a' AND
w2.population > 0
)
这将返回集合(100, 200, 300)
。
然后它应用条件:
where w1.area >= all (100, 200, 300)
(这不是真正有效的SQL,但传达了这个想法。)
好吧,我们知道w1.area = 100,所以这个条件是假的。
然后对每一行重复该过程。对于“ a”大陆,唯一符合条件的行是第三行-面积最大的行。