students(sid: char(10),sname: char(20) , class:int),Students 为软件学院 2015 级学生信 息表,sid 表示学生的学号,sname 为学生的姓名,class 为学生的班级,sid 为主关键 字。 course(cid:char(7),cname:string,teacher:string), Course 为软件学院 2015 级学生在 2016-2017 学期可选课程信息表,cid 表示课程号,cname 表示课程名,teacher 表示教 师,cid 是主关键字。 enrolled(sid:char(10),cid:char(7),grade:integer),Enrolled 为学生的选课信息表,sid 表示 学号, cid 表示课程号, grade 表示成绩。 用 SQL 语言写出下面的查询 5.统计各班学生的数据库原理的最高分。
时间: 2024-03-20 16:42:20 浏览: 31
数据库系统教学课件:第13讲查询处理(查询优化).pptx
可以使用子查询和聚合函数来完成此查询:
```
SELECT s.class, MAX(e.grade) AS max_grade
FROM Students s
JOIN Enrolled e ON s.sid = e.sid
JOIN Course c ON e.cid = c.cid
WHERE c.cname = '数据库原理'
GROUP BY s.class;
```
解释一下查询语句的各个部分:
- `SELECT s.class, MAX(e.grade) AS max_grade`:选择班级和该班级学生的数据库原理的最高分,使用 `MAX` 聚合函数计算最高分,并将其命名为 `max_grade`。
- `FROM Students s JOIN Enrolled e ON s.sid = e.sid JOIN Course c ON e.cid = c.cid`:从三个表中联接需要的数据,Students 表与 Enrolled 表关联(通过学号 sid),Enrolled 表与 Course 表关联(通过课程号 cid)。
- `WHERE c.cname = '数据库原理'`:筛选出课程名为 "数据库原理" 的记录。
- `GROUP BY s.class`:按班级进行分组,聚合函数 `MAX` 只会统计每个班级的最高分。
注意,如果一个班级中有多个学生的最高分相同,这个查询只会返回其中一个学生的最高分。如果需要返回所有最高分相同的学生,可以考虑使用窗口函数等技术。
阅读全文