SQL子查询语法

时间:2014-03-05 01:07:54

标签: sql

我正在浏览这里的在线教程,并且很难理解他们在Q6到Q8的解决方案。与答案的链接如下:

http://sqlzoo.net/wiki/SELECT_within_SELECT_Tutorial?answer=1

基本上我很难理解/描绘突出显示的陈述的作用。 world xworld y完全相同。任何指导都将不胜感激。

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

3 个答案:

答案 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