我正在浏览这里的在线教程,并且很难理解他们在Q6到Q8的解决方案。与答案的链接如下:
http://sqlzoo.net/wiki/SELECT_within_SELECT_Tutorial?answer=1
基本上我很难理解/描绘突出显示的陈述的作用。 world x
和world y
完全相同。任何指导都将不胜感激。
SELECT continent, name, area FROM world x
WHERE area >= ALL
(SELECT area FROM world y
WHERE y.continent=x.continent)
答案 0 :(得分:1)
基本上,这将为您提供每个大洲面积最大的行的名称。
第1行是来自世界x的最终结果集。
第2行将您的最终结果集过滤到面积最大的行。
Line3 / 4是您的子查询,用于比较。将对数据集中的每一行执行此子查询。
因为子查询的where子句确保大陆相等,所以每行只与来自同一大洲的行进行比较。
因此,对于x中的每一行,它将与大陆匹配的y中的每一行进行比较。如果行是> = y中的每一行,它将在最终结果集中结束。
(这是为了帮助理解,而不一定是sql引擎如何执行工作)
对于主查询中的每一行,运行子查询并返回与主查询中当前行的大陆匹配的所有行。对每个子查询行的主行进行比较,并且仅使用主要行中的行来填充最终结果集,其中区域是> =到子查询中的所有行。然后它转到主查询的第二行,直到完成所有比较,然后将最终结果集返回给您。
答案 1 :(得分:0)
这个怎么样:
SELECT continent, name, area
FROM world x
INNER JOIN world y
ON y.continent=x.continent
WHERE x.area >= ALL
我认为内部联接更容易理解
答案 2 :(得分:0)
子查询或内部查询或嵌套查询是查询中的查询。子查询通常添加在sql语句的WHERE子句中。大多数情况下,当您知道如何使用SELECT语句搜索值时使用子查询,但不知道数据库中的确切值。
您可以阅读更多here