本题目要求编写SQL语句, 查询每个同学超过他选修的平均成绩的课程。 请使用: 1)用相关子查询实现 2)使用派生表实现。 CREATE TABLE `cou` ( `cno` char(4) NOT NULL, `cname` varchar(30) NOT NULL, `credit` smallint(6) DEFAULT NULL, `ptime` char(5) DEFAULT NULL, `teacher` char(10) DEFAULT NULL, PRIMARY KEY (`cno`) ) CREATE TABLE `sc` ( `sno` char(4) NOT NULL, `cno` char(4) NOT NULL, `grade` decimal(6,1) DEFAULT NULL, PRIMARY KEY (`sno`,`cno`), CONSTRAINT `fk_sc_cno` FOREIGN KEY (`cno`) REFERENCES `cou` (`CNO`), ); 
时间: 2023-06-04 12:05:07 浏览: 80
使用相关子查询实现:
SELECT s.sname, c.cname, sc.grade
FROM sc
JOIN cou c ON sc.cno = c.cno
JOIN (SELECT sno, AVG(grade) AS avg_grade FROM sc GROUP BY sno) AS avg_sc ON sc.sno = avg_sc.sno
JOIN student s ON sc.sno = s.sno
WHERE sc.grade > avg_sc.avg_grade
ORDER BY s.sno, c.cno;
使用派生表实现:
SELECT s.sname, c.cname, sc.grade
FROM sc
JOIN cou c ON sc.cno = c.cno
JOIN (SELECT sno, AVG(grade) AS avg_grade FROM sc GROUP BY sno) AS avg_sc ON sc.sno = avg_sc.sno
JOIN student s ON sc.sno = s.sno
JOIN (SELECT sno, cno, grade FROM sc) AS all_grade ON sc.sno = all_grade.sno AND sc.cno = all_grade.cno
WHERE all_grade.grade > avg_sc.avg_grade
ORDER BY s.sno, c.cno;
相关问题
使用sql语句把选修了“C2”号课程,且成绩低于该门课程的平均成绩的学生的成绩提高5%
假设学生表名为students,选课表名为courses,成绩表名为scores,可以使用以下 SQL 语句实现:
```
UPDATE scores
SET score = score * 1.05
WHERE course_id = 'C2'
AND score < (SELECT AVG(score) FROM scores WHERE course_id = 'C2')
AND student_id IN (
SELECT student_id FROM courses
JOIN students ON courses.student_id = students.id
WHERE courses.course_id = 'C2'
);
```
解释一下:
- 首先,在子查询中,计算出选修了 C2 课程的学生的成绩平均值。
- 然后,在 UPDATE 语句中,将成绩低于该平均值的学生的成绩提高 5%。我们使用 WHERE 子句来限制更新的范围。
- course_id = 'C2' 限制了只更新 C2 课程的成绩。
- score < (SELECT AVG(score) FROM scores WHERE course_id = 'C2') 限制了只更新低于平均成绩的学生的成绩。
- student_id IN (...) 限制了只更新选修了 C2 课程的学生的成绩。
希望这可以帮助到你!
使用sql语句把选修了“C2”号课程,且成绩低于该门课程的平均成绩的学生的成绩提高5%;
假设学生表为student,选课表为course,成绩表为score,其中选课表中的cno表示课程号,score表中的cno表示课程号,score表示成绩,那么可以使用以下SQL语句实现:
```
UPDATE score SET score = score * 1.05 WHERE
cno = 'C2' AND score < (SELECT AVG(score) FROM score WHERE cno = 'C2') AND
sno IN (SELECT sno FROM course WHERE cno = 'C2');
```
该语句的作用是,先查询出选修了C2号课程,且成绩低于该门课程的平均成绩的学生的学号(即最后一个子查询),然后在成绩表score中,找到这些学生的成绩,并将它们都乘以1.05(即提高5%)。
相关推荐














