SQL存储过程和创建触发器问题

设有某校学籍管理系统数据库中有如下所示的三个关系S(学生信息表)、C(课程信息表)和SC(选修情况表),
S ( 学号,姓名,年龄,性别,系名,籍贯)
C (课程号,课程名,学时,学分)
SC (学号,课程号,​成绩)
1创建一个存储过程(名为abc),实现查询指定学号的姓名及所选信息。
2创建一个存储过程(名为“成绩查询”),实现按指定学生姓名查询成绩信息(包括姓名、成绩)的功能。
create procedure 成绩查询
3在“S”表上创建一个触发器,删除操作时,保证数据的完整性。
create trigger del_s on s
for delete
as
begin
想知道如何解决此问题,谢谢!

什么数据库呢? 存储过程可以参考这个 http://t.csdn.cn/fp2WQ 触发器可以参考这个 http://t.csdn.cn/78Trg 语法都差不多的

1DELIMITER //

CREATE PROCEDURE abc(IN studentID INT)
BEGIN
    SELECT S.姓名, SC.课程号, C.课程名
    FROM S
    INNER JOIN SC ON S.学号 = SC.学号
    INNER JOIN C ON SC.课程号 = C.课程号
    WHERE S.学号 = studentID;
END //

DELIMITER ;

2DELIMITER //

CREATE PROCEDURE 成绩查询(IN studentName VARCHAR(50))
BEGIN
    SELECT S.姓名, SC.成绩
    FROM S
    INNER JOIN SC ON S.学号 = SC.学号
    WHERE S.姓名 = studentName;
END //

DELIMITER ;

3DELIMITER //

CREATE TRIGGER del_s BEFORE DELETE ON S
FOR EACH ROW
BEGIN
    DELETE FROM SC WHERE SC.学号 = OLD.学号;
END //

DELIMITER ;

本答案来自GPT ,比较简单你可以参考一下

  1. 创建一个存储过程(名为abc),实现查询指定学号的姓名及所选信息。
CREATE PROCEDURE abc
    @student_id INT
AS
BEGIN
    SELECT S.姓名, C.课程名, SC.成绩
    FROM S
    JOIN SC ON S.学号 = SC.学号
    JOIN C ON SC.课程号 = C.课程号
    WHERE S.学号 = @student_id;
END

在这个存储过程中,我们使用JOIN操作将S、SC和C三个表连接起来,然后根据输入的学号参数查询指定学号的姓名及所选信息。最后,使用SELECT语句返回查询结果。

  1. 创建一个存储过程(名为“成绩查询”),实现按指定学生姓名查询成绩信息(包括姓名、成绩)的功能。
CREATE PROCEDURE 成绩查询
    @student_name NVARCHAR(50)
AS
BEGIN
    SELECT S.姓名, SC.成绩
    FROM S
    JOIN SC ON S.学号 = SC.学号
    WHERE S.姓名 = @student_name;
END

在这个存储过程中,我们使用JOIN操作将S和SC两个表连接起来,然后根据输入的学生姓名参数查询指定学生的姓名及成绩信息。最后,使用SELECT语句返回查询结果。

  1. 在“S”表上创建一个触发器,删除操作时,保证数据的完整性。
CREATE TRIGGER del_s ON S
FOR DELETE
AS
BEGIN
    DELETE FROM SC WHERE 学号 IN (SELECT 学号 FROM DELETED);
END

在这个触发器中,我们使用DELETE语句删除SC表中与被删除的学生相关的选修情况记录。具体来说,我们使用DELETED表获取被删除的学生的学号,然后在SC表中删除所有选修情况表中学号为该学生学号的记录。这样可以保证在删除学生信息时,其相关的选修情况信息也会被删除,从而保证数据的完整性。