SQL相关子查询的案例分析
本次案例分析结构如下:
- 相关子查询的实际案例分析
- 实际SQL代码
- 相关子查询的执行逻辑
一:实际案例解读
- 描述:有一个country表,字段为
Continent
、Name
、SurfaceArea
三个,其中Continent代表大洲,Name代表国家名称,SurfaceArea代表国土面积,求取每个大洲国土面积排名前三的国家的所属大洲、名称以及国土面积。 - 分析:如果是求取每个大洲国土面积最大的国家的所属大洲、国家名称以及国土面积相信会比较简单,因为最大值是个固定的值,这个值是可以查找计算出来的。
select c.Continent, c.Name, c.SurfaceArea from country c
where c.SurfaceArea = (select max(SurfaceArea) from country where c.Continent = Continent);
但如果是前三名或前n名,那么相对会复杂一些。
二:SQL代码实现
select c.Continent, c.Name, c.SurfaceArea from country c
where (select count(*) from country where Continent = c.continent and c.SurfaceArea < SurfaceArea) < 3
order by c.Continent,c.SurfaceArea desc;
三:代码执行逻辑解析
- SQL中使用的是相关子查询的概念,整个SQL代码包括外层的父查询和里层的子查询,并且该子查询属于相关子查询的范畴;
- 与嵌套子查询不同,该SQL执行的第一步为父查询,先从country表中查询出所以数据;
- 其次针对查询出的数据,逐一进入子查询,并根据条件判断该数据是否满足,如果不满足那么pass,如果满足则计入到最终结果中【注意count(*)计算的为满足条件的数据有几个,然后再和3进行比较,大于等于3的剔除掉】;
- 第一条数据判断完毕后,根据上面的思路再逐一判断其他数据,最终会把所有符合条件的数据筛选出来;
- 最后执行排序操作,使数据结果更具可读性,当然也可以不执行此语句。
以上就是SQL相关子查询的案例分析,更多内容敬请期待!