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

本文详细解释了SQL查询中的不相关子查询和相关子查询的概念、执行过程以及区别,通过实例展示了如何使用不相关子查询查找苏乐的专业,以及如何使用相关子查询如EXISTS找到选修特定课程的学生姓名。
摘要由CSDN通过智能技术生成

不相关子查询

子查询可独立执行,不依赖于父查询表的查询,称为不相关子查询。
执行过程:
(1)先执行子查询,其结果不会被显示,而是返回给外部查询来作为外部查询的查询条件;
(2)根据子查询的结果,执行外部查询。

 举例

  查询与’苏乐’在同一个专业学习的学生的信息。

select * from student

where maj=(select maj  from student where sname='苏乐');

select * from student

where maj in(select maj  from student  where sname='苏乐');

运行截图

相关子查询
构造子查询的查询条件时需要用到父查询的某一个属性列,这样的查询称为相关子查询。

相关子查询是无法独立执行的,因为它必然含有对外部查询表中元组分量的引用。
其执行过程为:
(1)按顺序从外部查询中取出一个元组,将元组的相关分量值传递给子查询;
(2)执行子查询,得到结果值;
(3)外部查询根据子查询返回的结果或结果集确定取出的这一行元组是否满足条件;若外层的where子句返回真值,说明符合;否则不符合,舍弃。
(4)重复步骤1-3,直到外部查询表中的所有元组都被处理完毕。

最常见的相关子查询是EXISTS引导的子查询。
EXISTS 引导的子查询不返回数据,而是返回是否存在满足子查询的外层查询元组的判断(真/假),主查询根据该判断来逐条取舍元组。

举例

   查询所有选修了“c1”课程的学生姓名。

select sname from student where exists (select * from sc  where sno=student.sno and cno='c1');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值