SQL相关子查询

SQL相关子查询的案例分析

本次案例分析结构如下:
- 相关子查询的实际案例分析
- 实际SQL代码
- 相关子查询的执行逻辑

一:实际案例解读

  • 描述:有一个country表,字段为ContinentNameSurfaceArea三个,其中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相关子查询的案例分析,更多内容敬请期待!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值