如何理解相关查询?

时间:2019-02-14 17:14:52

标签: mysql sql

我刚刚开始了一个sql练习风格的教程,但是我仍然没有掌握相关查询的概念。 名称,区域和大洲是表格上的字段。

查询是查找每个大洲中最大的国家(按区域),显示大洲,名称和区域。

到目前为止的工作草案:

SELECT continent, name, population FROM world x
WHERE area >= ALL
(SELECT area FROM world y
WHERE y.continent=x.continent
AND population>0)

尝试在其他一些博客上阅读它。 需要了解相关查询背后的逻辑。

2 个答案:

答案 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”大陆,唯一符合条件的行是第三行-面积最大的行。