20260709MySQL作业题

907 字
5 分钟
20260709MySQL作业题
多表查询综合案例:学校课程管理系统
1. 数据库和表结构创建
-- 创建数据库DROP DATABASE IF EXISTS school_management;CREATE DATABASE school_management;USE school_management;
-- 创建学生表DROP TABLE IF EXISTS student;CREATE TABLE student ( sid INT PRIMARY KEY, sname VARCHAR(20) NOT NULL, gender VARCHAR(2) NOT NULL DEFAULT '男', class VARCHAR(20) NOT NULL) COMMENT '学生表';
-- 创建课程表DROP TABLE IF EXISTS course;CREATE TABLE course ( cid INT PRIMARY KEY, cname VARCHAR(30) NOT NULL, credit INT NOT NULL DEFAULT 2) COMMENT '课程表';
-- 创建选课表DROP TABLE IF EXISTS sc;CREATE TABLE sc ( scid INT PRIMARY KEY AUTO_INCREMENT, sid INT NOT NULL, cid INT NOT NULL, score INT, sc_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY(sid) REFERENCES student(sid), FOREIGN KEY(cid) REFERENCES course(cid), CONSTRAINT sid_cid_unique UNIQUE(sid, cid)) COMMENT '选课表';2. 插入测试数据
-- 插入学生数据INSERT INTO student(sid, sname, gender, class) VALUES(1, '张三', '男', '计算机2101'),(2, '李四', '男', '计算机2101'),(3, '王芳', '女', '计算机2101'),(4, '赵敏', '女', '软件工程2101'),(5, '刘伟', '男', '软件工程2101'),(6, '陈静', '女', '计算机2102'),(7, '杨洋', '男', '计算机2102'),(8, '周杰', '男', '软件工程2102'),(9, '林琳', '女', '软件工程2102'),(10, '钱七', '男', '信息安全2101');
-- 插入课程数据INSERT INTO course(cid, cname, credit) VALUES(101, '高等数学', 4),(102, '大学英语', 3),(103, '数据结构', 3),(104, '操作系统', 3),(105, '数据库原理', 3),(106, '计算机网络', 3);
-- 插入选课数据INSERT INTO sc(sid, cid, score) VALUES(1, 101, 90),(1, 102, 85),(1, 103, 88),(2, 101, 75),(2, 103, 92),(3, 101, 88),(3, 102, 95),(3, 104, 80),(4, 102, 87),(4, 105, 91),(5, 103, 78),(5, 105, 85),(6, 101, 93),(6, 106, 89),(7, 102, 82),(7, 103, 90),(8, 104, 76),(8, 105, 88),(9, 101, 95),(9, 106, 92),(10, 103, 84),(10, 104, 87),(10, 105, 93);3. 查询需求
需求1:查询所有已选课的学生信息
要求:显示学生姓名、班级、课程名称和成绩,只显示有成绩的记录。 结果字段:学生姓名、班级、课程名称、成绩 查询类型:三表内连接
select s.sname as 学生姓名, s.class as 班级, c.cname as 课程名称, sc.score as 成绩from student s join sc on s.sid = sc.sid join course c on c.cid = sc.cid;需求2:查询所有学生及其选课情况
要求:显示所有学生信息,包含未选任何课程的学生,未选课的学生课程名称和成绩显示为NULL。 结果字段:学号、学生姓名、班级、课程名称、成绩 查询类型:左外连接
select s.sid as 学号, s.sname as 学生姓名, s.class as 班级, c.cname as 课程名称, sc.score as 成绩from student s left join sc on s.sid = sc.sid left join course c on c.cid = sc.cid;需求3:统计各班级学生的平均成绩
要求:按班级分组,计算每个班级的平均成绩,只显示平均成绩大于80分的班级。 结果字段:班级、平均成绩 查询类型:分组、聚合函数、HAVING过滤
select s.class as 班级, c.cname as 课程名称, round(avg(sc.score),1) as 平均成绩
from student s join sc on s.sid = sc.sid join course c on c.cid = sc.cidgroup by 班级,课程名称having 平均成绩>80;需求4:查询选修了”数据结构”课程的学生
要求:使用子查询方式,查询选修了”数据结构”课程的学生信息,显示学生姓名、性别、班级和成绩。 结果字段:学生姓名、性别、班级、成绩 查询类型:子查询
# 这个子查询没有用.
select 姓名, 性别, 班级, 成绩from (select s.sname as 姓名, s.gender as 性别, s.class as 班级, sc.score as 成绩 from student s join sc on s.sid = sc.sid join course c on c.cid = sc.cid where cname = '数据结构') as a;支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
20260709MySQL作业题
https://kulve.tech/posts/heimamysql/20260709mysql作业题/




















