sql server语句学生(学号,年龄,性别,系名) 课程(课号,课名,学分,学时) 选课(学号,课号,成绩) 根据上面基本表的信息定义一个存储过程,完成下面功能: 入口参数:学号 1 显示学生的选课信息 2 如果学生没选课,让他选1号课,插入一条选课记录,成绩为0 3 如果学生所有课都不及格,删掉该学生记录
时间: 2024-01-02 20:02:48 浏览: 121
好的,以下是存储过程的代码实现:
```
CREATE PROCEDURE GetStudentCourseInfo
(
@stuId INT
)
AS
BEGIN
-- 判断学生是否存在
IF NOT EXISTS(SELECT 1 FROM 学生 WHERE 学号 = @stuId)
BEGIN
PRINT '该学生不存在!'
RETURN
END
-- 1. 显示学生的选课信息
SELECT s.学号, s.年龄, s.性别, s.系名, c.课号, c.课名, c.学分, c.学时, x.成绩
FROM 学生 s
LEFT JOIN 选课 x ON s.学号 = x.学号
LEFT JOIN 课程 c ON x.课号 = c.课号
WHERE s.学号 = @stuId;
-- 2. 如果学生没选课,让他选1号课,插入一条选课记录,成绩为0
IF NOT EXISTS(SELECT 1 FROM 选课 WHERE 学号 = @stuId)
BEGIN
INSERT INTO 选课(学号, 课号, 成绩)
VALUES(@stuId, 1, 0)
PRINT '该学生未选课,已为其选修1号课程,成绩为0。'
END
-- 3. 如果学生所有课都不及格,删掉该学生记录
IF NOT EXISTS(SELECT 1 FROM 选课 WHERE 学号 = @stuId AND 成绩 >= 60)
BEGIN
DELETE FROM 学生 WHERE 学号 = @stuId
PRINT '该学生所有课程都不及格,已删除该学生记录。'
END
END
```
该存储过程有一个入口参数 @stuId,表示学生的学号。存储过程中,首先判断该学生是否存在,如果不存在,则输出提示信息并返回。接着,使用 LEFT JOIN 连接学生表、选课表和课程表,查询该学生的选课信息,并将结果输出。如果该学生没有选课,则插入一条选课记录,课程号为1,成绩为0,并输出提示信息。如果该学生所有课程都不及格,则删除该学生记录,并输出提示信息。
阅读全文