求大神指点以下SQL查询语句

题目:有些国家的人口是同洲份的所有其他国的3倍或以上。列出国家名字name和洲份continentSELECTname,continentFROMworldxWHEREx... 题目:有些国家的人口是同洲份的所有其他国的3倍或以上。列出国家名字name 和 洲份 continent
SELECT name,continent FROM world x
WHERE x.population / 3 >= ALL(SELECT population FROM world y WHERE y.continent = x.continent AND population >0 AND y.name != x.name
请高手指点上面的语句是通过什么思路编写出来的,SQL刚入门小白完全不理解为什么会出现那么多的x,y。能帮助我理解这个语句的思路,一定会再加分,先谢谢各位指点
展开
 我来答
ICodeY
2019-01-29 · TA获得超过163个赞
知道小有建树答主
回答量:186
采纳率:86%
帮助的人:90.8万
展开全部

1、这是sql中常用的“相关子查询”;

2、相关子查询的执行依赖于外部查询。多数情况下是子查询的WHERE子句中引用了外部查询的表。 
执行过程: 

(1)从外层查询中取出一个元组,将元组相关列的值传给内层查询。

(2)执行内层查询,得到子查询操作的值。 

(3)外查询根据子查询返回的结果或结果集得到满足条件的行。 

(4)然后外层查询取出下一个元组重复做步骤1-3,直到外层的元组全部处理完毕。

3、分析你的这个sql:

(1)从外层查询中取出一个元组,也就是'Afghanistan'这个国家,这时x指的就是该条数据;

(2)执行内层查询,

SELECT population FROM world y WHERE y.continent = x.continent AND population >0 AND y.name != x.name

这里的y这的是子查询中wold表里的数据;

这个子查询的意思是,把 除了'Afghanistan'这条数据,所有与'Afghanistan' 同一个州的且人口大于0的国家  筛选出来;

ALL(子查询结果) 表示将所有人口数相加;

(3) x.population / 3 >= ALL(子查询结果),意思是: 'Afghanistan' 这个国家的人口的三分之一大于等于其他同洲的国家人口之和;如果满足这个条件,x也就是'Afghanistan'这条数据将添加到结果集中;

(4)然后外层查询取出下一个元组重复做步骤1-3,直到外层的元组全部处理完毕。

追问
真的很详细,非常感谢。但是理解上还有一个疑问,x是相当于是把每行的结果套入进去语句中进行查询吗?那y又相当于是什么呢?最主要对x,y觉得很难理解,查了很多相关网站都还是不理解
追答

1、x相当于外层查询的数据,y相当于内层查询的数据;

2、给你举个例子:

            List<int> list1 = new List<int> { 1, 2, 3 };
            List<int> list2 = new List<int> { 2, 3, 4 };
            list1.ForEach(x =>
            {
                list2.ForEach(y =>
                {
                    if (x == y)
                    {
                        Console.WriteLine(x);
                    }
                });
            });

例子里的x,y就好比sql中的x,y;

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式