子查询快 还是关联查询快_SQL关联子查询

4419e7dd6132b8c28fbc3ccd683f5480.png

关联子查询,根本含义就是对于外部查询返回的每一行数据,内部查询都要执行一次,就像python里边说的遍历一样。遍历后对符合条件的记录进行操作。

e1c2cf2a17e53116d28b2014d95a6a86.png

表格sc

0f5a07bd31d58f68d6a35cc822094319.png

题目

查询每门课程的成绩第2名到第3名的学生信息及该课程成绩;

SELECT

where跟的条件的含义:查询同一个课程sc表的成绩小于sc1表的总人数。

子查询中"WHERE c_id=sc.c_id"其实是分组的意思。

用逻辑树分析方法分解为,同一课程比如01号课程,找sc表的成绩小于sc1成绩的总人数

sc表1号课程的所有信息:

ed3bcd8477032ec7baa1f25ae58b90f4.png

sc1表1号课程的所有信息:

29e337150e7e6b6bf13a1afec07f50a9.png

之前说过关联子查询就是遍历每一条记录,条件时找sc表的成绩小于sc1成绩的总人数

8fe92c82c598e2b9dbbfa6987ea345be.png

sc表第一行score是80分,从sc1表中没有找到比80更大的分数,所以结果为0;

571fb56ba359fc60ebc4e34a177b7692.png

sc表第二行score是70分(浅黄色行),从sc1表中找到3个比70大的分数(深黄色行),所以结果为3;

586c09cf46ae97861220fa91d1ad12f0.png

sc表第三行score是80分(浅橙色行),从sc1表中有1个与80相等的分数(深橙色行),因为排序在第三行,所以结果为1;

729b34386ecd8410c1752a071df2e434.png

sc表第四行score是50分(浅绿色行),从sc1表中找到4个比50大的分数(深绿色行),所以结果为4;

cdc8f6f3083461b1440e20d8cf86dfde.png

sc表第五行score是76分(浅蓝色行),从sc1表中找到2个比76大的分数(深蓝色行),所以结果为2;

99fb8b259e3268f4a92504671fdc8e4e.png

sc表第六行score是31分(浅灰色行),从sc1表中找到5个比31大的分数(深灰色行),所以结果为5;

排名结果:

83903321a138627798a263ad53a00b65.png

排名结果是从从0开始的,score是80分有两个,第一行的80分为0名,第三行的80分是第1名。要的结果是score排前2,3名,也就是排名结果在1和2之间,1号课程的地2、3名是学号3和5。

最终结果:

35373f97045b42469772f6e54a1d0e45.png

练手题

按各科成绩进行排序,并显示排名;

SELECT 

8f29ea0eaca7321da82739f5502679de.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值