admin 管理员组文章数量: 888337
练习6:多表关联查询、嵌套子查询
6. 查询学过「张三」老师授课的同学的信息
关键词分析: 学过、张三老师、同学信息
第一步: 锁定表,我们发现需要查询所有的四张表,各表使用的地方分别在后续步骤中一一说明。
第二步: 从teacher
表查出张三老师对应的TId
,即第一步图中的1
。
SELECT TId FROM teacher WHERE Tname = '张三';
第三步: 根据TId
我们便可以从course
表中查出张三老师教过哪些课的课程CId
,即第一步中的图2
,注意这里用的in而不是=,因为名字叫张三的老师可能有多个
。
SELECT CId FROM course WHERE TId IN (SELECT TId FROM teacher WHERE Tname = '张三');
第四步: 我们认为上过课就会在sc
表中记录成绩,即不缺考,所以可以根据CId
从sc
表中查出哪些学生获得了该课的学分,从而得到学生SId
,即第一步中的图3
。
SELECT SId
FROMsc
WHERE cid IN (SELECT CId FROM course WHERE TId IN (SELECT TId FROM teacher WHERE Tname = '张三')) ;
第五步: 有了SId
,便可以从student
表中查询对应的学生信息了,即第一步中的图4
。
SELECT *
FROMstudent
WHERE sid IN
(SELECT SId FROM sc WHERE cid IN (SELECT CId FROM course WHERE TId IN (SELECT TId FROM teacher WHERE Tname = '张三'))) ;
看上去很复杂,语句很长,其实就是多套了几个子查询而已,一步一步分析清楚,然后嵌套起来就可以写出来了。
当然,直接用关联查询也是可以的,将四张表的相关信息都放在同一行记录中,然后选出我们想要的字段即可,如下
SELECT st.* FROM student st
JOIN sc ON st.`SId` = sc.`SId`
JOIN course c ON sc.`CId` = c.`CId`
JOIN teacher t ON c.`TId` = t.`TId` AND t.`Tname` = '张三';
本文标签: 练习6多表关联查询嵌套子查询
版权声明:本文标题:练习6:多表关联查询、嵌套子查询 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1688272921h200021.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论