学生选课数据库SQL查询:查找选修指定教师全部课程的学生信息
查找选修指定教师全部课程的学生信息
本文将介绍如何在'学生-课程-选课'数据库中,查询选修了指定教师所开设全部课程的学生学号、姓名以及平均成绩。
数据库表结构:
- S 学生表: (学号 Sno, 姓名 Sname, 性别 Sex, 年龄 Age)* C 课程信息表: (课号 Cno, 课程名称 Cname, 授课教师 Teacher)* SC 选课表: (学号 Sno, 课号 Cno, 成绩 Grade)
查询目标:
查找选修了'Li Qiang'老师所开设全部课程的学生学号、姓名以及平均成绩。
查询思路:
- 找到指定教师授课的课程: 从课程信息表 (C) 中查询'Li Qiang'老师所教授的所有课程的课号 (Cno)。2. 找到选修了这些课程的学生: 从选课表 (SC) 中找到选修了步骤 1 中查询到的所有课程的学生学号 (Sno)。3. 计算学生的平均成绩: 根据步骤 2 中的学生学号,从学生表 (S) 和选课表 (SC) 中计算出每个学生的平均成绩。
**SQL 语句:**sqlSELECT S.Sno, S.Sname, AVG(SC.Grade) AS 平均成绩FROM SJOIN SC ON S.Sno = SC.SnoWHERE SC.Cno IN ( SELECT C.Cno FROM C WHERE C.Teacher = 'Li Qiang' )GROUP BY S.Sno, S.Sname;
代码解析:
- 子查询:
SELECT C.Cno FROM C WHERE C.Teacher = 'Li Qiang'首先查询出'Li Qiang'老师所教授的所有课程的课号。* IN 运算符:SC.Cno IN (...)将选课表 (SC) 中的课号 (Cno) 与子查询的结果进行匹配,筛选出选修了指定教师所有课程的学生。* 连接查询: 使用JOIN将学生表 (S) 和选课表 (SC) 连接起来,以便获取学生的姓名和成绩信息。* 分组聚合: 使用GROUP BY S.Sno, S.Sname对学生进行分组,并使用AVG(SC.Grade)计算每个学生的平均成绩。
注意:
- 上述 SQL 语句基于给定的表结构,实际应用中请根据您的数据库进行调整。* 该查询要求学生必须选修了指定教师所有课程才会被统计,如果需要查找选修了任意一门课程的学生,可以使用
EXISTS运算符代替IN运算符。
原文地址: https://www.cveoy.top/t/topic/bumA 著作权归作者所有。请勿转载和采集!