SQL入门之第十八讲——相关子查询

本文探讨了相关子查询在SQL中的实际案例,如筛选高分学生和跨表关联查询。通过实例解析,学习如何利用子查询优化查询速度,以及如何在多个表之间进行有效连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 在相关子查询中,子查询是在主查询每一条记录层面上一次进行的,子查询依赖主查询。
  2. 相关子查询比非关联查询执行起来要慢一点,但是这种有更多的实际应用。

实例1:选出成绩表中,学生编号在1-6之间的记录,找出那些超过相同科目平均成绩的学生成绩。

select * 
from scores as s     -- 将主查询的字段加上别名
where score > (
	select avg(score) 
	from scores 
	where cid = s.cid   --获取当前主查询的课程编号Cid
) 
and Sid BETWEEN 1 and 6    -- 查询条件1.大于平均成绩   2.学生编号在1-6

执行结果:
在这里插入图片描述

实例2:通过Sid连接scores表和students表,Cid连接scores表和suject表,选出学生标号在1-6之间,那些成绩超过相同科目平均成绩的学生,最终得到学生表中的Sname,成绩表中的score,课程表中的Cname

select st.Sname,t.Cname,s.score
from scores s
join students st
on s.Sid = st.Sid
join suject as t
on s.Cid = t.Cid
where score > (
	select avg(score) 
	from scores 
	where Cid = s.Cid   
)
and s.Sid between 1 and 6

实例解析:这个SQL就是在原来的基础上加两个join连接后,使用字段时要加上表的别名,
例如:
Sid between 1 and 6 中的 Sid 需要写成 s.Sid

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值