Boy wei 2024-04-28 09:48 采纳率: 33.3%
浏览 13

数据库原理及应用实验

二、实验内容
1.输入以下代码,创建存储过程stu_info,执行时通过输人姓名可以查询该姓名的学生的各科成绩
318
SET GLOBAL 1og_ bin_ trust_ function_creators =1;
DELIMITER @@
CREATE PROCEDURE stu info( IN name CHAR(8))
BEGIN
SELECT s.学号,姓名,课程编号,分数 FROM studentInf ade
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_name。
4.使用studentsdb 数据库中的grade表。
(1)创建一个存储过程stu-g_T,当输入一个学生的学号时,通过返回输出参数获取该学生选修课程的门数。
T
(2)执行存储过程stu__T,输人学号0002。
(3)显示0002号学生的选课门数。
使用studentsdb 数据库中的curriculum 表、grade表。
(1)创建一个存储函数 num_func,统计指定课程名称的选课人数。
(2)执行存储函数num_func,查看“C语言程序设计”的选课人数。
6使用studentsdb 数据库中的curriculum 表、grade表
(1)创建一个存储函数avg_func,通过游标统计指定课程的平均分。
(2)执行存储函数avg_func,查看“C语言程序设计”课程的平均分。
(3)删除存储函数avg_func。
三、实验思考
1.存储函数和存储过程如何将运算结果返回给外界?
2.存储函数有OUT参数、INOUT 参数吗?
3.使用游标的步骤。

  • 写回答

5条回答 默认 最新

  • 阿里嘎多学长 2024-04-28 09:48
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    问题概括

    这个问题的目的是要求学生通过编写和执行SQL语句,创建和调用存储过程与存储函数,以实现对数据库中数据的查询和统计。具体包括:

    1. 创建存储过程以查询特定学生的成绩。
    2. 创建存储过程以查询特定学号学生的姓名、课程名称和分数。
    3. 创建存储过程以查询一个学生的最高分、最低分和平均分。
    4. 创建存储过程以获取一个学生选修课程的门数。
    5. 创建存储函数以统计指定课程的选课人数。
    6. 创建存储函数以统计指定课程的平均分。

    问题出现原因

    这个问题出现的原因是学生需要掌握数据库中存储过程和存储函数的创建与使用,以及如何通过这些数据库对象来实现数据查询和统计的功能。

    问题解决方案

    为了解决这个问题,需要按照实验内容的步骤,逐一创建和调用存储过程与存储函数。以下是针对每个步骤的解决方案:

    1. 创建存储过程stu_info并调用它查询学生成绩。
    2. 创建存储过程stu_grade查询学号为0001的学生的相关信息,并调用它。
    3. 创建存储过程stu_name查询一个学生的最高分、最低分和平均分,调用它,然后删除该存储过程。
    4. 创建存储过程stu_g_T获取一个学生选修课程的门数,调用它,并显示结果。
    5. 创建存储函数num_func统计指定课程的选课人数,并执行它。
    6. 创建存储函数avg_func统计指定课程的平均分,执行它,然后删除该存储函数。

    提供代码

    以下是针对实验内容中提到的存储过程和存储函数的创建和调用的示例代码:

    -- 存储过程stu_info
    DELIMITER @@
    CREATE PROCEDURE stu_info(IN name CHAR(8))
    BEGIN
        SELECT s.学号, s.姓名, g.课程编号, g.分数
        FROM studentInfo 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.姓名, c.课程名称, g.分数
        FROM studentInfo s
        JOIN grade g ON s.学号 = g.学号
        JOIN curriculum c ON g.课程编号 = c.课程编号
        WHERE s.学号 = '0001';
    END @@
    DELIMITER ;
    
    -- 调用存储过程
    CALL stu_grade();
    
    -- 存储过程stu_name
    DELIMITER @@
    CREATE PROCEDURE stu_name(IN name CHAR(8))
    BEGIN
        DECLARE max_score DECIMAL(5, 2);
        DECLARE min_score DECIMAL(5, 2);
        DECLARE avg_score DECIMAL(5, 2);
        SELECT MAX(分数) INTO max_score FROM grade WHERE 学号 IN (SELECT 学号 FROM studentInfo WHERE 姓名 = name);
        SELECT MIN(分数) INTO min_score FROM grade WHERE 学号 IN (SELECT 学号 FROM studentInfo WHERE 姓名 = name);
        SELECT AVG(分数) INTO avg_score FROM grade WHERE 学号 IN (SELECT 学号 FROM studentInfo WHERE 姓名 = name);
        SELECT max_score AS 最高分, min_score AS 最低分, avg_score AS 平均分;
    END @@
    DELIMITER ;
    
    -- 调用存储过程
    CALL stu_name('张青平');
    
    -- 删除存储过程
    DROP PROCEDURE IF EXISTS stu_name;
    
    -- 存储过程stu_g_T
    DELIMITER @@
    CREATE PROCEDURE stu_g_T(INOUT course_count INT, IN student_id CHAR(10))
    BEGIN
        SELECT COUNT(*) INTO course_count FROM grade WHERE 学号 = student_id;
    END @@
    DELIMITER ;
    
    -- 调用存储过程并显示结果
    DECLARE course_count INT;
    CALL stu_g_T(@course_count, '0002');
    SELECT @course_count AS 选课门数;
    
    -- 存储函数num_func
    DELIMITER @@
    CREATE FUNCTION num_func(course_name CHAR(20)) RETURNS INT
    BEGIN
        DECLARE num INT;
        SELECT COUNT(*) INTO num FROM grade WHERE 课程编号 IN (SELECT 课程编号 FROM curriculum WHERE 课程名称 = course_name);
        RETURN num;
    END @@
    DELIMITER ;
    
    -- 执行存储函数
    SELECT num_func('C语言程序设计') AS 选课人数;
    
    -- 存储函数avg_func
    DELIMITER @@
    CREATE FUNCTION avg_func(course_name CHAR(20)) RETURNS DECIMAL(5, 2)
    BEGIN
        DECLARE avg_score DECIMAL(5, 2);
        SELECT AVG(g.分数) INTO avg_score FROM grade g JOIN curriculum c ON g.课程编号 = c.课程编号 WHERE c.课程名称 = course_name;
        RETURN avg_score;
    END @@
    DELIMITER ;
    
    -- 执行存储函数
    SELECT avg_func('C语言程序设计') AS 平均分;
    
    -- 删除存储函数
    DROP FUNCTION IF EXISTS avg_func;
    

    代码运行方式

    运行上述代码需要一个支持SQL的数据库环境,如MySQL。首先,确保已经连接到studentsdb数据库,然后将上述SQL代码复制到数据库管理工具中执行。

    代码预期运行结果

    由于这是一个数据库操作的示例,预期的运行结果是在数据库中成功创建了存储过程和存储函数,并且能够通过调用这些过程和函数来查询和统计数据。具体的查询结果将依赖于数据库中实际的数据。

    推荐相关链接

    以下是一些与数据库相关的资源链接,可以帮助你更深入地了解数据库原理及应用:

    1. MySQL官方文档
    2. W3Schools SQL教程
    3. 菜鸟教程 - SQL
    4. Stack Overflow - 数据库相关问题
    5. Database Star - 数据库教程和示例

    请注意,上述链接仅供参考,具体内容需要根据实际的数据库环境和需求进行调整。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 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接口,并反馈分析结果