"SQL实例教学:50句查询一个课题涉及的学生成绩与教师信息"

需积分: 0 0 下载量 177 浏览量 更新于2024-03-22 收藏 25KB DOCX 举报
在这个数据库中,涉及到学生表(tblStudent)、课程表(tblCourse)、成绩表(tblScore)和教师表(tblTeacher)四张表的数据查询。其中,学生表包含学生的编号(StuId)、姓名(StuName)、年龄(StuAge)和性别(StuSex)信息;课程表包含课程的编号(CourseId)、课程名称(CourseName)和教师编号(TeaId)信息;成绩表包含学生编号(StuId)、课程编号(CourseId)和成绩(Score)信息;教师表包含教师编号(TeaId)和姓名(TeaName)信息。 针对问题1,要查询“001”课程比“002”课程成绩高的所有学生的学号,可以通过以下SQL语句实现: ``` SELECT DISTINCT S.StuId FROM tblScore S WHERE S.CourseId = '001' AND S.Score > ( SELECT MAX(Score) FROM tblScore WHERE CourseId = '002' AND StuId = S.StuId ); ``` 这条SQL语句的作用是首先在成绩表中找到所有选修“001”课程且成绩高于选修“002”课程中最高成绩的学生的学号。首先对成绩表进行自连接,筛选出选修“001”课程的学生成绩,并与另一次子查询结果(最高的“002”课程成绩)进行比较,最终得到“001”课程成绩高于“002”课程成绩的学生学号。 除了问题1,我们还可以通过不同的SQL语句来实现更多数据查询功能,如: 2、查询选修“002”课程的成绩高于80分的学生姓名和成绩; ``` SELECT S.StuName, S.Score FROM tblStudent S INNER JOIN tblScore SC ON S.StuId = SC.StuId WHERE SC.CourseId = '002' AND SC.Score > 80; ``` 3、查询成绩表中最高分和最低分的学生姓名和成绩; ``` SELECT S.StuName, S.Score FROM tblStudent S INNER JOIN tblScore SC ON S.StuId = SC.StuId WHERE SC.Score = ( SELECT MAX(Score) FROM tblScore ) OR SC.Score = ( SELECT MIN(Score) FROM tblScore ); ``` 4、查询每门课程的平均分和及格率; ``` SELECT C.CourseName, AVG(SC.Score) AS AverageScore, COUNT(CASE WHEN SC.Score >= 60 THEN 1 END) / COUNT(*) AS PassRate FROM tblCourse C LEFT JOIN tblScore SC ON C.CourseId = SC.CourseId GROUP BY C.CourseName; ``` 通过以上SQL语句,我们可以在这个数据库中实现更多复杂的数据查询和分析。在实际应用中,可以根据具体需求编写不同的SQL语句来进行数据查询和统计,以满足业务需求并获取准确的数据分析结果。
2023-06-10 上传