文章目录
零、写在前面
本文所有代码均是在SQL ZOO平台进行,数据也该平台下的world表和一些其他平台提供的数据表,所有代码均已通过测试。
一、子查询基础用法
1、说明
子查询本身就是一段完整的查询语句,然后用括号英文括号(包裹嵌套在主查询语包虫,
子查询可以多层嵌套最常用的子查询运用在from和where子句中。
2、查询gdp高于欧洲每个国家的所有国家名,有一些国家gdp可能为null,需要进行排除
select name
from world
where gdp is not null
and gdp>=(select max(gdp) from world where continent='Europe')
注意:记得子查询的select要加括号,而且返回的必须是一个值(max(gdp)),而不是一列值(gdp)
3、查询与澳大利亚Australia和智利Chile同一个大洲的国家和所属大洲
select continent,name
from world
where continent in (select continent from world where name in('Australia','Chile'))
order by continent,name
4、子查询详细解释
(1)子查询是可以自己正常独立运行的一段完整的查询语句,然后将子查询的查询结果作为主查询的一部分,因此子查询优先于主查询运行
(2)练习1是带比较运算符的子查询,要求子查询为标量子查询,即子查询结果为一行- -列(相当于-一个单元格)
(3)练习2是带in关键字的子查询,要求子查询为列子查询,即子查询结果为多行一列(单列)
(4)where子句中的子查询适用于查询条件无法一步到位, 需要先进行一步查询得到结果,基于这个查询结果再进行条件判断的情况,相当于我们无法直达时,需要进行换乘
二、子查询综合用法(难题)
1、查询2017年所有在爱丁堡的选区当选议员所在选区(constituency) 及其团队(party) ,已知爱丁堡选区编号为S14000021至S14000026,当选议员即各选区得票数最高的候选人
第一步:使用窗口函数对各个选区的候选人进行排序
select constituency,party,votes,
rank() over(