mysql中的相关子查询

假设有课程表score,表中的记录如下:

现在要找出每个学生超过他所有选修课程平均成绩的课程号:

select Sno, Cno
from score x
where degree >= (select avg(degree)  /*某学生所有选课的平均成绩*/
                  from score y
                  where x.Sno = y.Sno)

内层查询是求一个学生所有选修课程平均成绩的,至于是哪个学生的平均成绩要看参数x.sno的值,而该值是与父查询相关的,因此这类内层查询条件依赖外层查询称为相关子查询

上面语句的一种可能的执行过程为:

1、从外层查询中取出score的一个元组x,将元组x的Sno值(101)传送给内层查询

select avg(degree)
from score y
where y.sno = '101';

2、执行内层查询,得到值74.5,用该值替代内层查询,得到外层查询:

select Sno,Cno
from score x
where degree >= 74.5;

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

4、然后外层查询取出下一个元组重复做上述1至3步骤的处理,直到外层SC元组全部处理完毕。结果为:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值