sql 根据实验2创建的s、c和sc表完成如下查询: s(sno,sname,age,sex,sdept,专业) c(cno,课程名,cpno,teacher,credit) sc(sno,cno,grade) 1.查询每个专业最高分的课程名和分数
时间: 2023-12-14 20:36:23 浏览: 154
可以使用子查询和聚合函数来实现该查询,具体SQL语句如下:
```
SELECT s.专业, c.课程名, MAX(sc.grade) AS 最高分数
FROM s, c, sc
WHERE s.sno = sc.sno AND c.cno = sc.cno
GROUP BY s.专业, c.课程名
HAVING MAX(sc.grade) = (
SELECT MAX(sc1.grade)
FROM sc AS sc1
WHERE sc1.cno = c.cno
)
```
解释一下上述SQL语句的执行过程:
1. 从 `s`, `c`, `sc` 三张表中查询出学生专业、课程名和成绩。
2. 使用 `GROUP BY` 对专业和课程名进行分组,使用聚合函数 `MAX` 计算每个组内最高分数。
3. 使用 `HAVING` 子句筛选出最高分数等于该课程最高分数的记录。
这样就可以得到每个专业最高分的课程名和分数。
相关问题
sql 根据实验2创建的s、c和sc表完成如下查询: s(sno,sname,age,sex,sdept,major c(cno,cname,cpno,teacher,credit) sc(sno,cno,grade) 1.查询每个专业最高分的课程名和分数
可以使用子查询和聚合函数来实现该查询:
```
SELECT c.cname, MAX(sc.grade) AS max_grade
FROM c, sc
WHERE c.cno = sc.cno AND sc.sno IN (
SELECT sno
FROM s
WHERE s.major = c.cname
)
GROUP BY c.cname;
```
解释:
首先从 `c` 和 `sc` 表中联结出每个学生的选课记录,同时限定这些学生所属专业与课程的名称一致。然后对每个课程进行分组,使用聚合函数 `MAX()` 找出每个课程的最高分数,最后将课程名和最高分数作为结果返回。
sql 根据s、c和sc表完成如下查询: s(sno,sname,age,sex,sdept,major) c(cno,cnamecpo,teacher,credit) sc(sno,cno,grade) 1要求用子查询完成 (1)查询选修了课程“C01”的学生的姓名和所在系。 (2)查询数学系成绩在80分以上的学生的学号,姓名。 2查询每个学生的情况以及他(她)所选修的课程。 3求学生的学号、姓名、选修的课程名及成绩。 4求选修数学课且成绩为90分以上的学生学号、姓名、及成 绩。 5查询每
1.
(1) SELECT s.sname, s.sdept FROM s WHERE s.sno IN (SELECT sc.sno FROM sc WHERE sc.cno = 'C01');
(2) SELECT s.sno, s.sname FROM s WHERE s.sdept = '数学系' AND s.sno IN (SELECT sc.sno FROM sc WHERE sc.grade >= 80);
2. SELECT s.sno, s.sname, s.age, s.sex, s.sdept, s.major, c.cname FROM s LEFT JOIN sc ON s.sno = sc.sno LEFT JOIN c ON sc.cno = c.cno;
3. SELECT s.sno, s.sname, c.cname, sc.grade FROM s LEFT JOIN sc ON s.sno = sc.sno LEFT JOIN c ON sc.cno = c.cno;
4. SELECT s.sno, s.sname, sc.grade FROM s LEFT JOIN sc ON s.sno = sc.sno WHERE sc.grade >= 90 AND sc.cno IN (SELECT cno FROM c WHERE cname = '数学');
5. SELECT s.sno, s.sname, COUNT(sc.cno) AS course_num FROM s LEFT JOIN sc ON s.sno = sc.sno WHERE sc.cno IN (SELECT cno FROM c WHERE cname = '数学') GROUP BY s.sno, s.sname;
阅读全文