相关子查询 和 不相关子查询

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循环一样,先执行一次外层循环,然后执行内层循环完毕后,继续执行外层循环的下一个值。

不相关子查询 就是先一次性把   内层查询  执行,再 执行外层 查询。

 

posted @   一只狗狗  阅读(2493)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示