二、实验内容
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
数据库原理及应用(MySQL版)实验五
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
在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;
以上就是对实验五中所有任务的解答,如果你在实际操作中有任何疑问,欢迎随时提问。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥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接口,并反馈分析结果