MySQL多表查询实践:学生科目成绩排名与统计
5星 · 超过95%的资源 需积分: 47 54 浏览量
更新于2024-09-03
收藏 117KB DOCX 举报
"该资源提供了一组SQL练习题,旨在帮助学习者掌握在MySQL数据库中进行多表查询的技能。主要包括三个查询任务:1) 查询每个科目成绩最好的两名学生;2) 计算每个学生的总分和平均分;3) 排列数学成绩并显示排名。资料中详细介绍了如何创建和填充数据,包括数据库、学生表和科目分数表的创建,以及数据插入的操作。"
在SQL中,多表查询是数据库操作的核心部分,特别是在处理涉及多个关联表的数据时。在这个资源中,我们有两个关键表格:`student` 和 `grade`。`student` 表用于存储学生的学号、姓名和年龄,而`grade` 表则包含学生的成绩信息,如学号、科目和分数。`grade` 表通过外键 `id` 与 `student` 表的 `id` 进行关联。
对于第一个查询任务,我们需要找出每门课程成绩最好的前两名学生。这通常涉及到使用`JOIN` 来连接两个表,然后使用`GROUP BY` 按科目分组,接着使用`ORDER BY` 对成绩进行降序排序,并利用`LIMIT` 来限制返回的记录数量。例如:
```sql
SELECT s.id, s.name, g.kemu, g.score
FROM student s
JOIN grade g ON s.id = g.id
WHERE g.score IN (
SELECT score
FROM grade
WHERE kemu = g.kemu
ORDER BY score DESC
LIMIT 2
)
```
第二个查询任务要求计算每个学生的总分和平均分。这可以通过再次使用`JOIN`,然后使用`GROUP BY`按学生分组,结合聚合函数`SUM()`和`AVG()`来完成:
```sql
SELECT s.id, s.name, g.kemu, g.score,
SUM(g.score) AS total_score, AVG(g.score) AS average_score
FROM student s
JOIN grade g ON s.id = g.id
GROUP BY s.id, s.name, g.kemu
```
最后一个任务是列出数学成绩及其排名。这里可以使用子查询或窗口函数`RANK()`或`DENSE_RANK()`来实现:
```sql
SELECT s.id, s.name, g.score, RANK() OVER (ORDER BY g.score DESC) AS ranking
FROM student s
JOIN grade g ON s.id = g.id
WHERE g.kemu = '数学'
```
以上SQL语句示例展示了如何处理多表查询,计算总分、平均分,以及如何进行排名操作。这些练习对于熟悉和提高SQL查询技巧非常有帮助,特别是对那些正在学习MySQL数据库的初学者来说。通过实践这些查询,学习者可以更好地理解和掌握如何在实际场景中有效地操作和分析数据库中的数据。
2010-10-28 上传
2008-09-18 上传
2023-04-04 上传
点击了解资源详情
2023-06-07 上传
2023-05-28 上传
2024-10-29 上传
Personal_Summary
- 粉丝: 10
- 资源: 3
最新资源
- 火炬连体网络在MNIST的2D嵌入实现示例
- Angular插件增强Application Insights JavaScript SDK功能
- 实时三维重建:InfiniTAM的ros驱动应用
- Spring与Mybatis整合的配置与实践
- Vozy前端技术测试深入体验与模板参考
- React应用实现语音转文字功能介绍
- PHPMailer-6.6.4: PHP邮件收发类库的详细介绍
- Felineboard:为猫主人设计的交互式仪表板
- PGRFileManager:功能强大的开源Ajax文件管理器
- Pytest-Html定制测试报告与源代码封装教程
- Angular开发与部署指南:从创建到测试
- BASIC-BINARY-IPC系统:进程间通信的非阻塞接口
- LTK3D: Common Lisp中的基础3D图形实现
- Timer-Counter-Lister:官方源代码及更新发布
- Galaxia REST API:面向地球问题的解决方案
- Node.js模块:随机动物实例教程与源码解析