本文共 3149 字,大约阅读时间需要 10 分钟。
以下是一系列基于不同表的嵌套查询实例,解析了学生表、教师表、课程表和成绩表之间的关系,并展示了如何通过嵌套查询解决实际问题。
查询语句:
SELECT sname FROM student WHERE sno IN ( SELECT sno FROM score s1, score s2 WHERE s1.cno = '3105' AND s2.cno = '3245' AND s1.sno = s2.sno)
解析:
通过连接score
表,并使用WHERE
子句筛选出同时选修课程号为3105和3245的学生,这些学生的学号将被返回,进而筛选出对应的学生姓名。 查询语句:
SELECT tname FROM teacher WHERE tno IN ( SELECT tno FROM course WHERE cno IN ( SELECT cno FROM score GROUP BY cno HAVING count(sno) = 7 ))
解析:
首先,统计score
表中每门课程的选修人数。GROUP BY cno
按课程号分组,HAVING
子句筛选出选修人数为7的课程号。然后,连接course
表获取这些课程的教师编号tno
,最终返回教师名称。 查询语�句:
SELECT sname FROM student WHERE sno IN ( SELECT sno FROM score WHERE cno IN ( SELECT cno FROM course WHERE cname = '高等数学' ))
解析:
通过先查询course
表中名称为“高等数学”的课程,获取课程号后,进一步筛选score
表中成绩记录的学生学号,最后返回对应的学生姓名。 查询语句:
SELECT avg(grade) as 平均成绩 FROM score WHERE cno IN ( SELECT cno FROM teacher WHERE sex = '男')
解析:
首先筛选出teacher
表中性别为“男”的教师编号tno
,获取这些教师授课的课程号,最后计算对应课程的平均成绩。 查询语句:
SELECT max(grade) as 最高分 FROM score WHERE cno IN ( SELECT cno FROM course WHERE tno IN ( SELECT tno FROM teacher WHERE dept = '电子工程' ))
解析:
通过链接teacher
、course
和score
三表,筛选出属于“电子工程系”的教师授课课程号,最后返回这些课程的最高成绩。 查询语句:
SELECT tname FROM teacher WHERE tno IN ( SELECT tno FROM course WHERE cno IN ( SELECT cno FROM score WHERE sno IN ( SELECT sno FROM student WHERE sname LIKE '王%' ) ))
解析:
首先筛选出姓“王”的学生学号,再根据学号获取他们选修的课程号,最后查出这些课程的任课教师名称。查询语句:
SELECT sname FROM student WHERE sno NOT IN ( SELECT sno FROM score WHERE cno = '3245')
解析:
直接筛选出未选修课程号为3245的所有学生,并返回对应的学生姓名。查询语句:
SELECT count(sno) as 选修人数 FROM score GROUP BY cno HAVING avg(grade) > 75 AND cno IN ( SELECT cno FROM course WHERE tno IN ( SELECT tno FROM teacher WHERE prof = '助教' ))
解析:
首先筛选出助教授课的课程号,计算这些课程的平均成绩是否大于75分,GROUP BY
和HAVING
结合使用后,筛选出满足条件的课程,并统计选修人数。 查询语句:
SELECT prof FROM teacher WHERE tno IN ( SELECT tno FROM course WHERE cno IN ( SELECT cno FROM score GROUP BY cno HAVING count(sno) > 6 ))
解析:
通过score
表统计每门课程的选修人数,筛选出超过6个学生的课程号,再连接course
和teacher
表获取授课教师的职称。 查询语句:
SELECT sno, sname FROM student WHERE sno IN ( SELECT sno FROM score GROUP BY sno HAVING count(cno) > 3)
解析:
通过score
表统计每个学生选修的课程数量,筛选出超过3门课程的学生学号,最后返回学号和对应的学生姓名。 查询语句:
SELECT tname FROM teacher WHERE tno IN ( SELECT tno FROM course WHERE cno IN ( SELECT cno FROM score WHERE grade IN ( SELECT grade FROM score WHERE sno IN ( SELECT sno FROM student WHERE dept = '计算机' ) ) ))
解析:
依次筛选出计算机系学生所选课程的成绩,之后确定成绩最高的课程号,再查出对应课程的任课教师名称。查询语句:
SELECT dept FROM teacher WHERE tno IN ( SELECT tno FROM course WHERE cno IN ( SELECT cno FROM score WHERE sno IN ( SELECT sno FROM student WHERE sname = '匡明' ) ))
解析:
通过学生学号获取成绩记录,进而查出选修课程号,再链接教师表获取课程的任课教师所在系。以上查询均通过嵌套查询技术高效解决了实际问题,展示了复杂数据库查询的应用场景。每一条查询都通过合理的表连接和条件筛选,精准提取所需数据。
转载地址:http://gtppz.baihongyu.com/