完成一个数据库课设包含SQL代码
时间: 2024-05-18 19:15:14 浏览: 99
好的,以下是一个简单的学生信息管理系统的数据库课设,包含 SQL 代码:
1. 数据库设计
学生表(students):
| 字段名 | 数据类型 | 约束 | 说明 |
| ------------ | -------------- | -------- | -------------- |
| id | int | 主键 | 学生编号 |
| name | varchar(20) | 非空 | 学生姓名 |
| gender | varchar(2) | 非空 | 学生性别 |
| birthday | date | 非空 | 学生出生日期 |
| department | varchar(50) | 非空 | 学生所属院系 |
| major | varchar(50) | 非空 | 学生所属专业 |
| grade | varchar(4) | 非空 | 学生所属年级 |
| class | varchar(10) | 非空 | 学生所属班级 |
| phone_number | varchar(20) | | 学生联系电话 |
| address | varchar(100) | | 学生家庭地址 |
课程表(courses):
| 字段名 | 数据类型 | 约束 | 说明 |
| ---------- | ----------- | -------- | ---------- |
| id | int | 主键 | 课程编号 |
| name | varchar(50) | 非空 | 课程名称 |
| credit | float | 非空 | 课程学分 |
| teacher | varchar(20) | 非空 | 授课教师 |
| department | varchar(50) | 非空 | 课程所属院 |
| time | varchar(50) | 非空 | 课程时间 |
| place | varchar(50) | 非空 | 课程地点 |
成绩表(scores):
| 字段名 | 数据类型 | 约束 | 说明 |
| ---------- | -------- | -------- | ---------- |
| id | int | 主键 | 成绩编号 |
| student_id | int | 外键 | 学生编号 |
| course_id | int | 外键 | 课程编号 |
| score | float | | 学生成绩 |
| exam_time | date | | 考试时间 |
| exam_type | varchar | 非空 | 考试类型 |
| note | varchar | | 成绩备注 |
2. 数据库实现
-- 创建数据库
CREATE DATABASE student_management;
-- 选择数据库
USE student_management;
-- 创建学生表
CREATE TABLE students (
id int PRIMARY KEY,
name varchar(20) NOT NULL,
gender varchar(2) NOT NULL,
birthday date NOT NULL,
department varchar(50) NOT NULL,
major varchar(50) NOT NULL,
grade varchar(4) NOT NULL,
class varchar(10) NOT NULL,
phone_number varchar(20),
address varchar(100)
);
-- 创建课程表
CREATE TABLE courses (
id int PRIMARY KEY,
name varchar(50) NOT NULL,
credit float NOT NULL,
teacher varchar(20) NOT NULL,
department varchar(50) NOT NULL,
time varchar(50) NOT NULL,
place varchar(50) NOT NULL
);
-- 创建成绩表
CREATE TABLE scores (
id int PRIMARY KEY,
student_id int,
course_id int,
score float,
exam_time date,
exam_type varchar(20) NOT NULL,
note varchar(100),
FOREIGN KEY (student_id) REFERENCES students(id),
FOREIGN KEY (course_id) REFERENCES courses(id)
);
-- 插入学生数据
INSERT INTO students VALUES
(1, '张三', '男', '1998-01-01', '计算机科学与技术学院', '计算机科学与技术', '2017', '1班', '18812345678', '北京市海淀区'),
(2, '李四', '女', '1999-02-02', '软件工程学院', '软件工程', '2018', '2班', '17712345678', '北京市朝阳区');
-- 插入课程数据
INSERT INTO courses VALUES
(1, '数据库原理', 3.0, '张老师', '计算机科学与技术学院', '周一1-3节', '教学楼102'),
(2, 'Java程序设计', 4.0, '李老师', '软件工程学院', '周二1-4节', '教学楼103');
-- 插入成绩数据
INSERT INTO scores VALUES
(1, 1, 1, 80, '2020-01-01', '期末考试', NULL),
(2, 1, 2, 90, '2020-01-02', '期末考试', NULL),
(3, 2, 1, 85, '2020-01-01', '期末考试', NULL),
(4, 2, 2, 95, '2020-01-02', '期末考试', NULL);
3. 数据库查询
-- 查询所有学生信息
SELECT * FROM students;
-- 查询所有课程信息
SELECT * FROM courses;
-- 查询所有学生成绩
SELECT * FROM scores;
-- 查询张三的所有成绩
SELECT scores.*, courses.name FROM scores, courses WHERE scores.student_id = 1 AND scores.course_id = courses.id;
-- 查询数据库中所有学生所属的院系
SELECT DISTINCT department FROM students;
-- 查询计算机科学与技术学院的学生信息
SELECT * FROM students WHERE department = '计算机科学与技术学院';
-- 查询所有学生的平均成绩
SELECT AVG(score) FROM scores;
-- 查询所有学生的平均成绩,并按照成绩降序排序
SELECT AVG(score) AS avg_score FROM scores GROUP BY student_id ORDER BY avg_score DESC;
-- 查询所有学生的平均成绩,并按照成绩降序排序,只显示前三个学生
SELECT AVG(score) AS avg_score FROM scores GROUP BY student_id ORDER BY avg_score DESC LIMIT 3;
4. 数据库维护
-- 备份数据库
mysqldump -u root -p student_management > student_management.sql
-- 优化数据库性能
ANALYZE TABLE students;
ANALYZE TABLE courses;
ANALYZE TABLE scores;
-- 修复数据库错误
REPAIR TABLE students;
REPAIR TABLE courses;
REPAIR TABLE scores;
阅读全文