SQL中相关子查询的执行

这篇文章来源于我的一个疑惑:

我们现在有两个表:

SC                                                                                       

       

Student

               

现在我们要执行一个查询:找出张三学生最低分的课程号

本来我是打算这么写的:


SELECT Cno FROM sc,student
WHERE Score <= all(SELECT Score FROM sc,student
                                   WHERE sc.Sno = student.Sno AND Sname = '张三') AND Sname = '张三' ;

结果发现执行结果是这个:

分析了一下,其实我个人的思维是比较适应非相关子查询的,所以写出了上面这种SQL,但是在最后面忘记加上AND sc.Sno = student.Sno,所以导致了错误,看了哈工大战德臣老师的公开课,发现他是这么写的:

SELECT Cno FROM sc,student
WHERE Sname = '张三' AND student.Sno = sc.Sno 
AND Score <= all(SELECT Score FROM sc
                  WHERE Sno = student.Sno);

按照我这个思维哈,括号中的子查询,是从sc中将score提取出来,但我一直不知道这个Sno=student.Sno这个条件的作用,很显然这句话的作用将sc中不是张三的成绩自动排除考虑范围了,但是我不知道咋做到的,所以我特意查了一下相关子查询的执行流程,参考的博客:https://www.jianshu.com/p/91a6f20e3c49

总结这篇博客就是,先从父查询中取出一条记录,子查询中不是用到了student.Sno嘛,这个指的就是刚才从父查询中取出的这条记录的Sno,由于我们还有条件:‘’张三',所以这条记录还得是张三,还有一个条件就是这个课得是张三选的课,进入子查询中,取出的成绩也得是张三的成绩,这样这条记录就算经过重重考验了,我们就可以把这条记录的Cno放心提出来了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值