作业七

(1)display_salary 存储过程

-- 创建存储过程:输出工资前三名的教师信息
DELIMITER //

CREATE PROCEDURE display_salary()
BEGIN
    SELECT tno AS 教师号, tn AS 教师姓名, sal AS 工资
    FROM t
    ORDER BY sal DESC
    LIMIT 3;
END //

DELIMITER ;

-- 调用存储过程进行测试
CALL display_salary();

执行结果

image-932abbb9

(2)display_score 存储过程

-- 创建存储过程:根据学号查询学生选修的所有课程成绩
DELIMITER //

CREATE PROCEDURE display_score(IN p_sno CHAR(10))
BEGIN
    DECLARE stu_count INT;

    -- 检查学生是否存在
    SELECT COUNT(*) INTO stu_count FROM s WHERE sno = p_sno;

    IF stu_count = 0 THEN
        SELECT '数据库中不存在该学生' AS 提示信息;
    ELSE
        SELECT s.sno AS 学号, s.sn AS 姓名, c.cn AS 课程名, sc.score AS 成绩
        FROM s
        JOIN sc ON s.sno = sc.sno
        JOIN c ON sc.cno = c.cno
        WHERE s.sno = p_sno;
    END IF;
END //

DELIMITER ;

-- 测试1:查询存在的学生(s2)
CALL display_score('s2');

-- 测试2:查询不存在的学生(s99)
CALL display_score('s99');

测试1执行结果(学号s2存在):

image-58340bf6

测试2执行结果(学号s99不存在):

image-bc5fbc07