Boy wei 2024-04-28 16:59 采纳率: 33.3%
浏览 40
已结题

数据库原理及应用(MySQL版)实验五

二、实验内容
1.输人以下代码,创建存储过程suinfo,执行时通过输入姓名可以查询该姓名的学
的各科成绩
SET GIOBAL log bin trust_function_ creators1;
DELIMITER @@
CREATE PROCEDURE stu info(IN name CHAR(8))
BEGIN
SELBCTS s.学号,姓名,课程编号,外数FROM student_info s,grade g
WHERE s.学号=g.学号 AND 姓名=name;
END @
使用CALL命令执行存储过程stu_info.其参数值为'张青平”。
DELIMITER;
CALL stu_ info('张青平');
2.使用studentsdb数据库中的 student_info 表、curriculum 表、grade表。
(1)创建一个存储过程 stu_grade,查询学号为0001的学生的姓名、课程名称、分数
(2)调用存储过程stu_grade。
3.使用studentsdb数据库中的student info 表、curriculum 表、grade 表。
(1)创建存储过程stu_ name,当任意输入一个学生的姓名时,查看其课程的最高分、最
低分、平均分。
(2)调用存储过程stu_ name
(3)删除存储过程stu_ namie。
4.使用studentsdb数据库中的grade表。
(1)创建一个存储过程 stu_g_r,当输人一个学生的学号时,通过返回输出参数获取该
学生选修课程的门数
(2)执行存储过程stu_g_r,输人学号0002
(3)显示0002号学生的选课门数
5.使用studentsdb数据库中的curriculum 表、grade 表。
(1)创建一个存储函数 num-func,统计指定课程名称的选课人数
(2)执行存储函数num_func,查看“C语言程序设计”的选课人数。
6.使用studentsdb数据库中的curriculum 表、grade表。
(1)创建一个存储函数avg_func,通过游标统计指定课程的平均分
(2)执行存储函数avg_func,查看“C语言程序设计”课程的平均分
(3)删除存储函数avg_func

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-28 16:59
    关注

    引自免费微信小程序:皆我百晓生

    在MySQL环境下,我们可以按照实验要求逐一完成这些操作。以下是针对每个部分的具体步骤和代码示例。

    一、创建并执行存储过程stu_info

    首先设置全局参数,然后定义存储过程,并使用CALL语句执行。

    SET GLOBAL log_bin_trust_function_creators = 1;
    DELIMITER $$
    
    CREATE PROCEDURE stu_info(IN name CHAR(8))
    BEGIN
        SELECT s.学号, s.姓名, g.课程编号, g.分数
        FROM student_info s
        JOIN grade g ON s.学号 = g.学号
        WHERE s.姓名 = name;
    END$$
    DELIMITER ;
    
    CALL stu_info('张青平');
    

    二、创建并执行存储过程stu_grade

    DELIMITER $$
    
    CREATE PROCEDURE stu_grade()
    BEGIN
        SELECT s.学号, s.姓名, c.课程名称, g.分数
        FROM student_info s
        JOIN curriculum c ON s.课程编号 = c.课程编号
        JOIN grade g ON s.学号 = g.学号
        WHERE s.学号 = '0001';
    END$$
    DELIMITER ;
    
    CALL stu_grade();
    

    三、创建并执行存储过程stu_name以及删除存储过程

    DELIMITER $$
    
    CREATE PROCEDURE stu_name(IN name CHAR(8))
    BEGIN
        DECLARE max_score INT DEFAULT 0;
        DECLARE min_score INT DEFAULT 9999;
        DECLARE avg_score DECIMAL(5,2);
        DECLARE course_count INT DEFAULT 0;
        
        SELECT MAX(g.分数), MIN(g.分数), AVG(g.分数)
        INTO max_score, min_score, avg_score
        FROM grade g
        JOIN student_info s ON g.学号 = s.学号
        WHERE s.姓名 = name;
        
        SELECT COUNT(DISTINCT g.课程编号)
        INTO course_count
        FROM grade g
        JOIN student_info s ON g.学号 = s.学号
        WHERE s.姓名 = name;
        
        SELECT max_score AS '最高分', min_score AS '最低分', avg_score AS '平均分', course_count AS '课程门数';
    END$$
    DELIMITER ;
    
    CALL stu_name('张青平');
    
    DROP PROCEDURE stu_name;
    

    四、创建并执行存储过程stu_g_r

    DELIMITER $$
    
    CREATE PROCEDURE stu_g_r(IN student_id CHAR(8), OUT total_courses INT)
    BEGIN
        SELECT COUNT(*) INTO total_courses
        FROM grade g
        JOIN student_info s ON g.学号 = s.学号
        WHERE s.学号 = student_id;
    END$$
    DELIMITER ;
    
    CALL stu_g_r('0002', @total_courses);
    
    SELECT @total_courses AS '选课门数';
    

    五、创建并执行存储函数num_func

    DELIMITER $$
    
    CREATE FUNCTION num_func(course_name VARCHAR(20)) RETURNS INT
    BEGIN
        DECLARE count_students INT;
        
        SELECT COUNT(*) INTO count_students
        FROM curriculum c
        JOIN grade g ON c.课程编号 = g.课程编号
        WHERE c.课程名称 = course_name;
        
        RETURN count_students;
    END$$
    DELIMITER ;
    
    SELECT num_func('C语言程序设计') AS '选课人数';
    

    六、创建并执行存储函数avg_func,然后删除存储函数

    DELIMITER $$
    
    CREATE FUNCTION avg_func(course_name VARCHAR(20)) RETURNS DECIMAL(5,2)
    BEGIN
        DECLARE avg_score DECIMAL(5,2);
        
        SELECT AVG(g.分数) INTO avg_score
        FROM curriculum c
        JOIN grade g ON c.课程编号 = g.课程编号
        WHERE c.课程名称 = course_name;
        
        RETURN avg_score;
    END$$
    DELIMITER ;
    
    SELECT avg_func('C语言程序设计') AS '平均分';
    
    DROP FUNCTION avg_func;
    

    以上就是对实验五中所有任务的解答,如果你在实际操作中有任何疑问,欢迎随时提问。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月14日
  • 已采纳回答 5月6日
  • 创建了问题 4月28日

悬赏问题

  • ¥15 VESTA绘图原子颜色显示异常
  • ¥15 天翼云搭建多ip l2tp
  • ¥30 matlab求解刃位错方程
  • ¥15 python实现CAD识图
  • ¥15 如何实现在renpy中创建并应用不同大小尺寸对话框?
  • ¥15 table表格有一列是固定列 滑动到最下面时 固定的那一列有几行没显示出来
  • ¥20 单细胞数据注释时报错
  • ¥15 vscode编译ros找不到头文件,cmake.list文件出问题,如何解决?(语言-c++|操作系统-linux)
  • ¥15 通过AT指令控制esp8266发送信息
  • ¥15 有哪些AI工具提供可以通过代码上传EXCEL文件的API接口,并反馈分析结果