基于school数据库中的student, course, sc表,用SQL数据库创建满足下述要求的存储过程:查询指定课程的学生成绩大于他自己选修课程平均成绩的学生学号和姓名。
时间: 2024-02-06 07:12:40 浏览: 107
好的,以下是满足您要求的SQL存储过程:
```sql
CREATE PROCEDURE sp_get_students_above_avg(IN course_name VARCHAR(255))
BEGIN
SELECT s.student_id, s.student_name
FROM student s
INNER JOIN sc ON s.student_id = sc.student_id
INNER JOIN course c ON sc.course_id = c.course_id
WHERE c.course_name = course_name
AND sc.score > (
SELECT AVG(sc2.score)
FROM sc sc2
INNER JOIN course c2 ON sc2.course_id = c2.course_id
WHERE s.student_id = sc2.student_id AND c2.course_name = course_name
);
END;
```
这个存储过程接收一个参数 `course_name`,表示要查询的课程名。它会先联结 `student`,`sc` 和 `course` 表,筛选出指定课程的学生成绩记录。然后用子查询计算该学生自己选修该课程的平均成绩,并与当前学生成绩比较。如果当前成绩高于平均成绩,那么就返回该学生的学号和姓名。
请注意,该存储过程只会返回符合条件的学生记录,如果没有符合条件的学生,则不会返回任何结果。
阅读全文