关联子查询,根本含义就是对于外部查询返回的每一行数据,内部查询都要执行一次,就像python里边说的遍历一样。遍历后对符合条件的记录进行操作。
表格sc
题目
查询每门课程的成绩第2名到第3名的学生信息及该课程成绩;
SELECT
where跟的条件的含义:查询同一个课程sc表的成绩小于sc1表的总人数。
子查询中"WHERE c_id=sc.c_id"其实是分组的意思。
用逻辑树分析方法分解为,同一课程比如01号课程,找sc表的成绩小于sc1成绩的总人数
sc表1号课程的所有信息:
sc1表1号课程的所有信息:
之前说过关联子查询就是遍历每一条记录,条件时找sc表的成绩小于sc1成绩的总人数
sc表第一行score是80分,从sc1表中没有找到比80更大的分数,所以结果为0;
sc表第二行score是70分(浅黄色行),从sc1表中找到3个比70大的分数(深黄色行),所以结果为3;
sc表第三行score是80分(浅橙色行),从sc1表中有1个与80相等的分数(深橙色行),因为排序在第三行,所以结果为1;
sc表第四行score是50分(浅绿色行),从sc1表中找到4个比50大的分数(深绿色行),所以结果为4;
sc表第五行score是76分(浅蓝色行),从sc1表中找到2个比76大的分数(深蓝色行),所以结果为2;
sc表第六行score是31分(浅灰色行),从sc1表中找到5个比31大的分数(深灰色行),所以结果为5;
排名结果:
排名结果是从从0开始的,score是80分有两个,第一行的80分为0名,第三行的80分是第1名。要的结果是score排前2,3名,也就是排名结果在1和2之间,1号课程的地2、3名是学号3和5。
最终结果:
练手题
按各科成绩进行排序,并显示排名;
SELECT