相关子查询 和 不相关子查询
1. 什么叫不相关子查询?
子查询的查询条件不依赖于父查询,称不相关子查询。
例:查询与”刘晨“在一个系学习的同学。
select sno,sname,sdept
from student
where sdept IN(
select sdept
from student
where sname='刘晨');
2. 什么叫相关子查询?
子查询的查询条件依赖于父查询,称为 相关子查询。
例:找出每个学生超过他自己选修课程平均成绩的课程号。
select sno,cno
from sc x
where grade >=(select avg(grade)
from sc y
where y.sno=x.sno);
x
是表sc
的别名, 又称为 元组变量, 可以用来表示sc的一个元组。
内层查询的结果是一个学生所有选修课程平均成绩的,至于是哪个学生的平均成绩就由参数x.sno
的值决定,而该值是与父查询i相关的,因此称这类查询为相关子查询。
相关子查询的过程:
首先,从父查询中取出sc表的一个元组x,将元组x的sno值传递给子查询。
然后,执行子查询,得到某个值,用这个值代替 子查询的结果 ,父查询由 嵌套查询 变为 只有一层外层查询的简单的查询。
最后,执行这个简单的查询,即得结果。
3. 相关 vs 不相关
相关子查询 的查询过程 就像 C 语言的 双重For循环一样,先执行一次外层循环,然后执行内层循环完毕后,继续执行外层循环的下一个值。
不相关子查询 就是先一次性把 内层查询 执行,再 执行外层 查询。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?