创建一个Sql代码项目,系统功能基本要求如下: 学生信息:学号、姓名、性别、专业、年级等 学生成绩信息:包括学号、课程编号、课程名称、分数等 课程信息:包括课程编号、课程名称、任课老师等 需实现基本信息的录入、删除和修改功能;需按照一定条件查询、统计学生成绩,但不能任意修改成绩。至少一个函数,两个存储过程,一个触发器,

时间: 2023-07-04 17:08:17 浏览: 86
以下是一个简单的SQL代码项目,实现了学生信息、学生成绩信息、课程信息的录入、删除和修改功能,并且实现了按照一定条件查询、统计学生成绩的功能。同时,添加了一个触发器,用于在学生成绩信息表中插入记录时,自动更新学生信息表中的总成绩和平均成绩。 ```sql -- 创建学生信息表 CREATE TABLE student_info ( id INT PRIMARY KEY, name VARCHAR(20) NOT NULL, gender VARCHAR(2) NOT NULL, major VARCHAR(50) NOT NULL, grade INT NOT NULL ); -- 创建课程信息表 CREATE TABLE course_info ( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, teacher VARCHAR(20) NOT NULL ); -- 创建学生成绩表 CREATE TABLE student_grade ( id INT PRIMARY KEY, student_id INT NOT NULL, course_id INT NOT NULL, score DECIMAL(5, 2) NOT NULL, FOREIGN KEY (student_id) REFERENCES student_info(id), FOREIGN KEY (course_id) REFERENCES course_info(id) ); -- 添加触发器,计算学生总成绩和平均成绩 CREATE TRIGGER update_student_grade AFTER INSERT ON student_grade FOR EACH ROW BEGIN UPDATE student_info SET total_score = total_score + NEW.score, avg_score = total_score / (SELECT COUNT(*) FROM student_grade WHERE student_id = NEW.student_id) WHERE id = NEW.student_id; END; -- 创建一个函数,用于查询某个学生的总成绩和平均成绩 CREATE FUNCTION get_student_score_avg(student_id INT) RETURNS DECIMAL(5, 2) BEGIN DECLARE student_total_score DECIMAL(5, 2); DECLARE student_course_count INT; SELECT total_score INTO student_total_score FROM student_info WHERE id = student_id; SELECT COUNT(*) INTO student_course_count FROM student_grade WHERE student_id = student_id; RETURN student_total_score / student_course_count; END; -- 创建一个存储过程,用于录入学生信息 CREATE PROCEDURE insert_student_info( IN student_id INT, IN student_name VARCHAR(20), IN student_gender VARCHAR(2), IN student_major VARCHAR(50), IN student_grade INT ) BEGIN INSERT INTO student_info VALUES(student_id, student_name, student_gender, student_major, student_grade); END; -- 创建一个存储过程,用于删除学生信息 CREATE PROCEDURE delete_student_info( IN student_id INT ) BEGIN DELETE FROM student_info WHERE id = student_id; END; -- 创建一个存储过程,用于修改学生信息 CREATE PROCEDURE update_student_info( IN student_id INT, IN student_name VARCHAR(20), IN student_gender VARCHAR(2), IN student_major VARCHAR(50), IN student_grade INT ) BEGIN UPDATE student_info SET name = student_name, gender = student_gender, major = student_major, grade = student_grade WHERE id = student_id; END; -- 创建一个存储过程,用于录入学生成绩信息 CREATE PROCEDURE insert_student_grade( IN grade_id INT, IN student_id INT, IN course_id INT, IN score DECIMAL(5, 2) ) BEGIN INSERT INTO student_grade VALUES(grade_id, student_id, course_id, score); END; -- 创建一个存储过程,用于删除学生成绩信息 CREATE PROCEDURE delete_student_grade( IN grade_id INT ) BEGIN DELETE FROM student_grade WHERE id = grade_id; END; -- 创建一个存储过程,用于修改学生成绩信息 CREATE PROCEDURE update_student_grade( IN grade_id INT, IN student_id INT, IN course_id INT, IN score DECIMAL(5, 2) ) BEGIN UPDATE student_grade SET student_id = student_id, course_id = course_id, score = score WHERE id = grade_id; END; -- 查询某个学生的总成绩和平均成绩 SELECT get_student_score_avg(1); -- 录入学生信息 CALL insert_student_info(1, '张三', '男', '计算机科学与技术', 2018); -- 删除学生信息 CALL delete_student_info(1); -- 修改学生信息 CALL update_student_info(1, '李四', '男', '计算机科学与技术', 2019); -- 录入学生成绩信息 CALL insert_student_grade(1, 1, 1, 85.5); -- 删除学生成绩信息 CALL delete_student_grade(1); -- 修改学生成绩信息 CALL update_student_grade(1, 2, 2, 92.0); -- 按照条件查询学生成绩信息 SELECT student_info.name, course_info.name, student_grade.score FROM student_grade JOIN student_info ON student_grade.student_id = student_info.id JOIN course_info ON student_grade.course_id = course_info.id WHERE student_info.major = '计算机科学与技术' AND course_info.teacher = '王老师'; -- 统计某门课程的平均分和最高分 SELECT AVG(score), MAX(score) FROM student_grade WHERE course_id = 1; ```

最新推荐

recommend-type

python+mysql实现学生信息查询系统

主要为大家详细介绍了python+mysql实现学生信息查询系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

只有两个字段用一个sql语句查询出某个学生的姓名、成绩以及在表中的排名

主要介绍了只有两个字段用一个sql语句查询出某个学生的姓名、成绩以及在表中的排名,需要的朋友可以参考下
recommend-type

学生成绩管理系统——数据库课程设计2.doc

本数据库设计是为简单的课程设计探讨 | 对数据库系统的设计初学者 简单 | 容易模仿 | 能提供作业思路 不需积分即可下载
recommend-type

基于Java+sql教师信息管理系统课设报告

基于Java+sql教师信息管理系统课设报告,教师信息管理系统主要用于实现用户名的登陆,退出,教师信息的添加,查找, ...操作,对sql数据库的连接,关闭等基本操作,以及对JAVA编程设计的的基本功能的实现。
recommend-type

数据库系统原理- 学生信息管理系统-sql数据库实验+报告

学生信息管理系统,可用于学校等机构的学生信息管理,查询,更新...学生信息表:姓名,学号,性别,学院名,专业,联系电话,班号,住址 课程信息表:课程号、教室号、学分,课程名 成绩表:课程号、成绩、学号,课程名
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

hive中 的Metastore

Hive中的Metastore是一个关键的组件,它用于存储和管理Hive中的元数据。这些元数据包括表名、列名、表的数据类型、分区信息、表的存储位置等信息。Hive的查询和分析都需要Metastore来管理和访问这些元数据。 Metastore可以使用不同的后端存储来存储元数据,例如MySQL、PostgreSQL、Oracle等关系型数据库,或者Hadoop分布式文件系统中的HDFS。Metastore还提供了API,使得开发人员可以通过编程方式访问元数据。 Metastore的另一个重要功能是跟踪表的版本和历史。当用户对表进行更改时,Metastore会记录这些更改,并且可以让用户回滚到
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。