【数据库系统概论】程序题
“学生管理数据库”包含以下三个表,即学生表Student、课程表Course和选课表SC,结构如下:
Student(Sno,Sname,Ssex,Sage,Sdept)Course (Cno,Cname,Cpno,Ccredit)SC(Sno,Cno,Grade)
其中,Sno
为学号,Sname
为学生姓名,Ssex
为性别,Sage
为年龄
系别:Cno
为课程号,Cname
为课程名,Cpno
为先行课号,Ccredit
为学分成绩。
-
查询所有名字中第二个字为“强”的学生的学号、姓名和性别,学号降序排列。
要查询所有名字中第二个字为“强”的学生的学号、姓名和性别,并按学号降序排列,可以使用如下的 SQL 查询语句。SELECT Sno, Sname, Ssex FROM Student WHERE Sname LIKE '_强%' ORDER BY Sno DESC;
解释:
SELECT Sno, Sname, Ssex
:选择需要查询的列,即学号(Sno)、姓名(Sname)和性别(Ssex)。FROM Student
:指定查询的数据表为学生表(Student)。WHERE Sname LIKE '_强%'
:条件过滤,选择姓名(Sname)中第二个字为“强”的记录。_
表示任意一个字符,%
表示零个或多个字符。ORDER BY Sno DESC
:按学号(Sno)降序排列结果。
-
查询各个课程号与相应的选课人数。
SELECT Cno, COUNT(Sno) AS student_count FROM SC GROUP BY Cno;
解释:
SELECT Cno, COUNT(Sno) AS student_count
选择列:
Cno:这是课程号列。
COUNT(Sno) AS student_count
:这是一个聚合函数,用于计算每个课程号对应的选课学生人数。COUNT(Sno)
会统计每个课程号(Cno)的学生记录数,并将结果命名为student_count
。FROM SC
:这是选课表,包含学生学号(Sno)、课程号(Cno)和成绩(Grade)。GROUP BY Cno
:按课程号(Cno)进行分组。分组操作会将选课表(SC)中所有相同课程号(Cno)的记录归为一组。
-
查询“王强”所在系的学生的平均成绩。
SELECT AVG(SC.Grade) AS avg_grade FROM SC JOIN Student ON SC.Sno = Student.Sno WHERE Student.Sdept = (SELECT SdeptFROM StudentWHERE Sname = '王强' );
解释:
SELECT AVG(SC.Grade) AS avg_grade
:选择并计算指定系别学生的平均成绩。FROM SC JOIN Student ON SC.Sno = Student.Sno
:将选课表(SC)和学生表(Student)通过学号(Sno)连接。WHERE Student.Sdept = (SELECT Sdept FROM Student WHERE Sname = '王强')
:子查询SELECT Sdept FROM Student WHERE Sname = '王强'
查找“王强”所在的系别,并过滤出属于该系别的学生的成绩记录。