利用MySQL进行数据复杂查询(2)

2) 某中学在线考试系统数据库及表创建
某中学开发了一套在线考试系统,完整系统涵盖教师端、学员端、家长端的查询和操作功能,本实验是将其中的成绩管理子模块单独取出来作为实验案例,涉及了教师管理、学员管理、科目管理、成绩管理四个方向。案例从学校实际需求出发设计,帮助学生系统了解MySQL数据库及数据表的创建等内容。
根据系统功能分析,可划分如下表:
表2-6 某中学在线考试系统数据库表
序号 表名称 描述
1 tbl_course 科目表
2 tbl_sc 成绩表
3 tbl_student 学生表
4 tbl_teacher 老师表
同时本案例对如上表的字段进行约束设计,包括主键、非空、唯一、检查约束等约束,具体如下:
表2-7 tbl_course表结构
编号 列名称 说明 类型 长度 约束
1 cid 科目编号 varchar 50 主键约束
2 cname 科目名称 varchar 50 非空约束
3 tid 老师编号 varchar 50 外键约束
表2-8 tbl_sc表结构
编号 列名称 说明 类型 长度 约束
1 scid 成绩编号 int 11 主键约束
2 sid 学生编号 varchar 50 外键约束
3 cid 科目编号 varchar 50 外键约束
4 score 成绩 int 11 非空约束
表2-9 tbl_student表结构
编号 列名称 说明 类型 长度 约束
1 sid 学生编号 varchar 50 主键约束
2 sname 学生姓名 varchar 50 非空约束
3 sage 学生年龄 int 11 非空约束
4 sex 学生性别 int 11 非空约束
表2-10 tbl_teacher表结构
编号 列名称 说明 类型 长度 约束
1 tid 老师编号 varchar 50 主键约束
2 tname 老师姓名 varchar 50 非空约束

插入如下数据在表中:
tbl_course表
在这里插入图片描述

tbl_sc表
在这里插入图片描述

tbl_student表
在这里插入图片描述

tbl_teacher表
在这里插入图片描述

1)根据姓名查询学生信息(4分)

SELECT * from tbl_student WHERE sname = 'Jack'

2)查询年龄小于30岁的学生信息(4分)

SELECT * from tbl_student WHERE sage < 30

3)查询年龄在2530之间的学生信息(4分)

SELECT * FROM tbl_student WHERE sage BETWEEN 25 and 30

4)按照年龄从大到小顺序输出学生信息(4分)

SELECT * FROM tbl_student ORDER BY sage desc

5)查询年龄最小的学生信息(4分)

SELECT * FROM tbl_student ORDER BY sage LIMIT 1

6)查询姓“刘”“张”的老师的个数(4分)

SELECT COUNT(*) FROM tbl_teacher WHERE tname LIKE '刘%';
SELECT COUNT(*) FROM tbl_teacher WHERE tname LIKE '张%'; 

7)查询老师的总数(4分)

SELECT COUNT(tname) FROM tbl_teacher

8)查询每个老师的授课数目(4分)

SELECT tname,COUNT(*) as '授课科目' FROM tbl_teacher GROUP BY tname WHERE tid IN(SELECT tid FROM tbl_course)

9)查询每个老师有多少学生(4分)

SELECT tname,COUNT(*) FROM(
SELECT DISTINCT tname,sid FROM tbl_teacher a
JOIN tbl_course b on a.tid = b.tid
JOIN tbl_sc c on b.cid = c.cid
)a GROUP BY tname

10)根据科目名称查询科目信息(4分)

select * from tbl_course where cname='体育'

11)查询每个科目对应的老师名字(4分)

SELECT cid,cname,tname FROM tbl_course a JOIN tbl_teacher b on a.tid = b.tid

12)查询每个科目有多少学生在学(4分)

 SELECT cid,COUNT(*) FROM tbl_sc GROUP BY cid

13)查询科目名称中带有's'关键字的科目信息(4分)

SELECT * FROM tbl_course WHERE cname like '%语%'

14)查询不止1个老师教的科目(4分)

SELECT cname FROM tbl_course GROUP BY cname HAVING COUNT(*)>1

15)查询平均成绩大于60分的同学的学号和平均成绩(5分)

SELECT sid,AVG(score) FROM tbl_sc GROUP BY sid HAVING AVG(score)>60

16)查询所有同学的学号、姓名、选课数、总成绩 (10分)

SELECT a.sid,a.sname,COUNT(b.cid),sum(b.score) FROM tbl_student a JOIN tbl_sc b on a.sid = b.sid GROUP BY sid

17)查询所有课程成绩小于60分的同学的学号、姓名(5分)

SELECT sid,sname FROM tbl_student  WHERE sid NOT IN(SELECT sid from tbl_sc WHERE score >= 60)

18)查询不同老师所教不同课程平均分从高到低显示(10分)

SELECT tname,cname,AVG(c.score) as 平均分 FROM tbl_teacher a
JOIN tbl_course b on a.tid = b.tid
JOIN tbl_sc c on b.cid = c.cid
GROUP BY tname,cname ORDER BY AVG(c.score) desc
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
利用MySQL进行复杂数据分析,可以采取以下方法: 1. 使用SQL查询语言: - 学习和掌握SQL语言的高级特性,如子查询、联合查询、窗口函数等,以进行复杂数据查询和分析。 - 使用聚合函数(如SUM、AVG、COUNT等)对数据进行统计和计算,以获取所需的指标和汇总信息。 - 利用条件筛选(WHERE子句)、排序(ORDER BY子句)和分组(GROUP BY子句)等功能来组织和处理数据。 2. 利用MySQL的内置函数和操作符: - MySQL提供了丰富的内置函数,如数学函数、字符串函数、日期和时间函数等,可以用于数据处理和计算。 - 使用MySQL的操作符(如逻辑操作符、比较操作符等)进行条件筛选、计算和逻辑操作。 3. 编写存储过程和触发器: - 存储过程是一组预编译的SQL语句,可以在MySQL中创建和执行。你可以编写存储过程来实现复杂数据处理逻辑和分析操作。 - 触发器是与表相关联的一种特殊类型的存储过程。你可以使用触发器在特定的数据变化时执行相应的操作,例如更新汇总数据或生成报表。 4. 使用临时表和表连接: - 创建临时表来存储中间结果,以便在复杂数据分析中进行多次计算和操作。 - 利用表连接(JOIN)来关联多个表,以便在查询中获取相关的数据。 5. 结合其他工具和库: - 使用MySQL的连接器(如JDBC、ODBC等)将数据导入到其他数据分析工具中,如Excel、Tableau等,以利用它们的高级分析和可视化功能。 - 通过使用MySQL的扩展工具或第三方库,如MySQL Workbench、DataGrip等,可以提供更高级的查询和分析功能。 需要根据具体的数据分析需求和数据结构灵活选择方法,并结合相应的技术和工具。了解SQL语言和MySQL的功能特性对于进行复杂数据分析是非常重要的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值