《MySQL数据操作与查询》- 维护学生信息、老师信息和成绩信息 支持按多种条件组合查询学生信息和成绩信息

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 《MySQL数据操作与查询》- 维护学生信息、老师信息和成绩信息 支持按多种条件组合查询学生信息和成绩信息

综合项目需求


一、系统整体功能


系统需支持以下功能:

维护学生信息、老师信息和成绩信息

支持按多种条件组合查询学生信息和成绩信息


学生 Student(id,班级id,学号,姓名,性别,电话,地址,出生日期,民族,家长电话1,家长电话2)


老师 Teacher(id,工号,姓名,性别,电话,类型(班主任、讲师))


班级 Class(id,班级名称,讲师id,班主任id)


课程 Subject(id,课程名称、课程简介)


成绩 Score(id,stu_id,sub_id,卷面成绩,项目成绩,平时成绩,综合成绩)


二、系统的信息需求


一个班级有一个讲师一个班主任

一个班级有多名学生

一个学生有多门课程,一门课程也有多名学生


70.png


三、表结构


【学生表 Student】


71.png

【教师表 Teacher】


72.png


【班级表Class】

73.png

【课程表Subject】


74.png

【成绩表Score】

75.png


四、数据维护


(1)查询自己的信息,显示学号,姓名,性别,电话,地址,出生日期,民族,家长电话1,家长电话2


SELECT nostudent 学号,name 姓名,sex 性别,phone 电话,address 地址,birthday 出生日期,nation 名族,parent_phone_1 家长电话1,parent_phone_2 家长电话2 
FROM student 
WHERE id=1;


(2)查询自己和所在班级的信息,显示班级,学号,姓名,性别,电话,地址,出生日期,民族,家长电话1,家长电话2

SELECT class.name 班级,nostudent 学号,student.name 姓名,sex 性别,phone 电话,address 地址,birthday 出生日期,nation 名族,parent_phone_1 家长电话1,parent_phone_2 家长电话2 
FROM student,class WHERE student.class_id = class.id 
AND class_id=1;


(3)查询所有讲师的带班信息,显示,讲师姓名,班级,班级人数

SELECT t.name 讲师姓名,c.name 班级,COUNT(*) 班级人数 FROM student s,class c,teacher t
WHERE s.class_id=c.id AND c.lecturer_id = t.id
AND teacher_type='讲师'
GROUP BY c.name;


(4)查询班级信息,显示班级名称、讲师姓名、班主任姓名,班级人数


SELECT c.name 班级名称,t.name 讲师姓名,COUNT(*) 班级人数 FROM student s,class c,teacher t
WHERE s.class_id=c.id AND c.lecturer_id = t.id AND teacher_type='讲师'
GROUP BY c.name;
SELECT c.name 班级名称,t.name 讲师姓名,COUNT(*) 班级人数 FROM student s,class c,teacher t
WHERE s.class_id=c.id AND c.class_teacher_id = t.id AND teacher_type='班主任'
GROUP BY c.name;


(5)查询我们班的成绩信息,要求显示,姓名,卷面成绩,项目成绩,平时成绩,综合成绩,按综合成绩降序排序


SELECT st.name 姓名,exam 卷面成绩,project 项目成绩,daily 平时成绩,result 综合成绩
FROM student st,score sc
WHERE sc.stu_id=st.id AND st.class_id=1;


(6)查询每个讲师带了多少学生,显示讲师姓名,学生数


SELECT t.name 讲师姓名,COUNT(s.class_id) 学生数 FROM student s,class c,teacher t
WHERE s.class_id=c.id AND c.lecturer_id = t.id
AND teacher_type='讲师'
GROUP BY teacher_type;


(7)查询各班H5卷面成绩,显示班级、平均分,最高分,最低分


SELECT c.name 班级,AVG(exam) 平均成绩,MAX(exam) 最高成绩,MIN(exam) 最低成绩 FROM class c,score s,student st 
WHERE c.id=st.class_id AND s.stu_id=st.id AND s.sub_id=3;


(8)查询你自己各科成绩,显示,姓名、卷面成绩,项目成绩,平时成绩,综合成绩


SELECT st.name 姓名,exam 卷面成绩,project 项目成绩,daily 平时成绩,result 综合成绩 FROM student st,score sc,`subject` su
WHERE sc.stu_id=st.id AND sc.sub_id=su.id
AND st.name='杨明金';


(9)查询各地州的学生人数,显示,地址州,学生人数,按人数排序


SELECT address 地址州,COUNT(name) 学生人数 FROM student 
GROUP BY address
ORDER BY COUNT(name)


(10)查询自己所有成绩的平均分,显示姓名 卷面成绩,项目成绩,平时成绩,综合成绩


SELECT st.name 姓名,AVG(exam) 卷面成绩,AVG(project) 项目成绩,AVG(daily) 平时成绩,AVG(result) 综合成绩 FROM student st,score sc,`subject` su
WHERE sc.stu_id=st.id AND sc.sub_id=su.id
AND st.name='杨明金';


(11)查询各地州的学生平均成绩,显示,地址州,学生人数,平均卷面成绩,平均项目成绩,平均平时成绩,平均综合成绩,按综合成绩排序从高到低排序


SELECT address 地址州,COUNT(st.name) 学生人数,AVG(exam) 卷面成绩,AVG(project) 项目成绩,AVG(daily) 平时成绩,AVG(result) 综合成绩 FROM student st,score sc,`subject` su
WHERE sc.stu_id=st.id AND sc.sub_id=su.id
GROUP BY address


(12)查询所有学生的成绩信息,显示,学生姓名,班级,讲师,班主任,课程名,卷面成绩,项目成绩,平时成绩,综合成绩,按卷面成绩排序从高到低排序


SELECT st.name 学生姓名,cl.name 班级名称,te.name 老师姓名,su.name 课程名称,exam 卷面成绩,project 项目成绩,daily 平时成绩, result 综合成绩
FROM score sc,`subject` su,student st,class cl,teacher te
WHERE sc.sub_id=su.id AND sc.stu_id=st.id AND cl.id=st.class_id AND te.id=cl.lecturer_id  
ORDER BY exam DESC


(13)查询各讲师各科目的平均分,显示讲师,科目,卷面成绩,项目成绩,平时成绩,综合成绩,选择合适的排序字段和排序方式

SELECT te.name 讲师,su.name 科目,exam 卷面成绩,project 项目成绩,daily 平时成绩,result 综合成绩
FROM score sc,`subject` su,student st,class cl,teacher te
WHERE sc.sub_id=su.id AND sc.stu_id=st.id AND cl.id=st.class_id AND te.id=cl.lecturer_id
ORDER BY result DESC


(14)查询各讲师各班各科目的平均分,显示讲师,班级,科目,卷面成绩,项目成绩,平时成绩,综合成绩, 选择合适的排序字段和排序方式


SELECT te.name 讲师,cl.name 班级, su.name 科目,AVG(exam) 卷面成绩,AVG(project) 项目成绩,AVG(daily) 平时成绩,AVG(result) 综合成绩 
FROM score sc,`subject` su,student st,class cl,teacher te
WHERE sc.sub_id=su.id AND sc.stu_id=st.id AND cl.id=st.class_id AND te.id=cl.lecturer_id
GROUP BY te.name,cl.name
ORDER BY result DESC


五、数据库导入


/*
Navicat MySQL Data Transfer
Source Server         : test
Source Server Version : 50646
Source Host           : localhost:3306
Source Database       : schools
Target Server Type    : MYSQL
Target Server Version : 50646
File Encoding         : 65001
Date: 2020-09-11 16:31:56
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for class
-- ----------------------------
DROP TABLE IF EXISTS `class`;
CREATE TABLE `class` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `lecturer_id` int(1) DEFAULT NULL,
  `class_teacher_id` int(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of class
-- ----------------------------
INSERT INTO `class` VALUES ('1', '19计算机网络技术一班', '1', '2');
INSERT INTO `class` VALUES ('2', '19计算机网络技术二班', '1', '2');
INSERT INTO `class` VALUES ('3', '19大数据技术与应用一班', '1', '3');
-- ----------------------------
-- Table structure for score
-- ----------------------------
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `stu_id` int(20) DEFAULT NULL,
  `sub_id` int(1) DEFAULT NULL,
  `exam` decimal(18,1) DEFAULT NULL,
  `project` decimal(18,1) DEFAULT NULL,
  `daily` decimal(18,1) DEFAULT NULL,
  `result` decimal(18,1) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of score
-- ----------------------------
INSERT INTO `score` VALUES ('1', '1', '1', '50.0', '70.0', '90.0', '230.0');
INSERT INTO `score` VALUES ('2', '1', '3', '85.0', '60.0', '50.0', '603.0');
INSERT INTO `score` VALUES ('3', '2', '4', '50.0', '90.0', '80.0', '656.0');
INSERT INTO `score` VALUES ('4', '4', '5', '65.0', '86.0', '56.0', '455.0');
INSERT INTO `score` VALUES ('5', '2', '6', '45.0', '48.0', '65.0', '915.0');
INSERT INTO `score` VALUES ('6', '3', '5', '45.0', '46.0', '45.0', '564.0');
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `class_id` int(11) DEFAULT NULL,
  `nostudent` varchar(30) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  `sex` char(2) DEFAULT NULL,
  `phone` varchar(20) DEFAULT NULL,
  `address` varchar(200) DEFAULT NULL,
  `birthday` date DEFAULT NULL,
  `nation` varchar(20) DEFAULT NULL,
  `parent_phone_1` varchar(20) DEFAULT NULL,
  `parent_phone_2` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('1', '1', '193610202629', '杨明金', '男', '18214217246', '云南昭通', '2020-09-11', '汉族', '13587757775', '5454874545');
INSERT INTO `student` VALUES ('2', '1', '195656546544', '肖明安', '女', '154345343535', '云南昆明', '2020-10-21', '藏族', '26565656565', '5656565655');
INSERT INTO `student` VALUES ('3', '2', '235656565555', '闪正', '女', '1534565654', '四川眉州', '2020-09-08', '汉族', '15645878787', '1546787645');
INSERT INTO `student` VALUES ('4', '2', '156487867557', '岩奔', '男', '12345454886', '云南文山', '2020-09-16', '白族', '15647867878', '5413434543');
INSERT INTO `student` VALUES ('5', '3', '156986564565', '刘泽龙', '女', '15649878978', '云南曲靖', '2020-09-06', '布依族', '15645484777', '1565456475');
-- ----------------------------
-- Table structure for subject
-- ----------------------------
DROP TABLE IF EXISTS `subject`;
CREATE TABLE `subject` (
  `id` int(255) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  `remark` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of subject
-- ----------------------------
INSERT INTO `subject` VALUES ('1', '计算机应用基础', '介绍');
INSERT INTO `subject` VALUES ('2', 'Photoshop UI设计', '介绍');
INSERT INTO `subject` VALUES ('3', 'HTML5网页设计', '简介');
INSERT INTO `subject` VALUES ('4', 'Java程序设计基础', '这是简介');
INSERT INTO `subject` VALUES ('5', 'C#程序设计基础', '这是介绍');
-- ----------------------------
-- Table structure for teacher
-- ----------------------------
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nonumber` varchar(30) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  `sex` char(2) DEFAULT NULL,
  `phone` varchar(20) DEFAULT NULL,
  `Teacher_type` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of teacher
-- ----------------------------
INSERT INTO `teacher` VALUES ('1', '1500077', '王威', '男', '159********', '讲师');
INSERT INTO `teacher` VALUES ('2', '1500044', '鲁卫秀', '女', '183********', '班主任');
INSERT INTO `teacher` VALUES ('3', '1500027', '李松龄', '女', '184********', '班主任');
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
11天前
|
关系型数据库 MySQL
MySQL查看连接数和进程信息
这篇文章介绍了如何在MySQL中查看连接数和进程信息,包括当前打开的连接数量、历史成功建立连接的次数、连接错误次数、连接超时设置,以及如何查看和终止正在执行的连接进程。
51 10
|
4天前
|
关系型数据库 MySQL 数据库
MySQL的语法涵盖了数据定义、数据操作、数据查询和数据控制等多个方面
MySQL的语法涵盖了数据定义、数据操作、数据查询和数据控制等多个方面
19 5
|
6天前
|
存储 关系型数据库 MySQL
MySQL索引失效及避免策略:优化查询性能的关键
MySQL索引失效及避免策略:优化查询性能的关键
30 3
|
8天前
|
关系型数据库 MySQL 数据库
MySQL 表的CRUD与复合查询
【9月更文挑战第26天】本文介绍了数据库操作中的 CRUD(创建、读取、更新、删除)基本操作及复合查询。创建操作使用 `INSERT INTO` 语句插入数据,支持单条和批量插入;读取操作使用 `SELECT` 语句查询数据,可进行基本查询、条件查询和排序查询;更新操作使用 `UPDATE` 语句修改数据;删除操作使用 `DELETE FROM` 语句删除数据。此外,还介绍了复合查询,包括连接查询(如内连接、左连接)和子查询,以及聚合函数与分组查询,并提供了示例代码。
|
11天前
|
关系型数据库 MySQL 数据库
Python MySQL查询返回字典类型数据的方法
通过使用 `mysql-connector-python`库并选择 `MySQLCursorDict`作为游标类型,您可以轻松地将MySQL查询结果以字典类型返回。这种方式提高了代码的可读性,使得数据操作更加直观和方便。上述步骤和示例代码展示了如何实现这一功能,希望对您的项目开发有所帮助。
37 4
|
14天前
|
NoSQL 关系型数据库 MySQL
当Redis与MySQL数据一致性校验中Redis数据量小于MySQL时的全量查询处理方法
保持Redis和MySQL之间的数据一致性是一个需要细致规划和持续维护的过程。通过全量数据同步、建立增量更新机制,以及定期执行数据一致性校验,可以有效地管理和维护两者之间的数据一致性。此外,利用现代化的数据同步工具可以进一步提高效率和可靠性。
36 6
|
11天前
|
关系型数据库 MySQL
mysql查询速度慢怎么解决?
mysql查询速度慢怎么解决?
33 2
|
11天前
|
关系型数据库 MySQL
mysql & clinkhouse之查询 行拼接
mysql & clinkhouse之查询 行拼接
mysql & clinkhouse之查询 行拼接
|
18天前
|
存储 缓存 关系型数据库
MySQL 查询优化方法
在数据库应用中,高效的查询性能至关重要。本文探讨了常用的 MySQL 查询优化方法,包括索引优化(选择合适的索引字段、复合索引、定期维护索引)、查询语句优化(避免全表扫描、限制返回行数、避免使用不必要的函数)、表结构优化(选择合适的数据类型、分区表、定期清理无用数据)及数据库配置优化(调整缓存大小、优化存储引擎参数)。通过这些方法,可以显著提高 MySQL 的查询性能,为应用程序提供更好的用户体验。
|
2天前
|
存储 关系型数据库 MySQL
MySQL中利用FIND_IN_SET进行包含查询的技巧
`FIND_IN_SET`提供了一种简便的方法来执行包含查询,尤其是当数据以逗号分隔的字符串形式存储时。虽然这个方法的性能可能不如使用专门的关系表,但在某些场景下,它提供了快速简便的解决方案。开发者应该根据具体的应用场景和性能要求,权衡其使用。
8 0
下一篇
无影云桌面