MySQL进阶实战:解密复杂查询
需积分: 14 181 浏览量
更新于2024-09-14
收藏 22KB DOCX 举报
"MySQL进阶练习"
在MySQL数据库管理中,进阶练习通常涉及到更复杂的查询和操作,这对于提升数据库技能至关重要。本练习主要关注SQL查询语句的使用,特别是涉及分组、聚合函数以及连接查询的场景。
首先,我们来看第一道练习题。题目要求查询出所有每门课程得分都超过80分的学生姓名。给出的表`score`包含了`name`(学生姓名)、`kecheng`(课程)和`socre`(分数)三列。解答此题的关键在于理解`HAVING`子句和`GROUP BY`子句的区别。`WHERE`子句通常用于在数据分组前进行筛选,而`HAVING`则是在数据分组后进行条件筛选。由于我们需要找出每个学生所有课程的最低分是否都超过80分,因此需要先按学生姓名`name`进行分组,然后使用`MIN(score)`找到每个学生的最低分,最后使用`HAVING`来筛选出最低分大于80的学生。正确答案是:
```sql
SELECT name, MIN(score) AS min_score
FROM score
GROUP BY name
HAVING min_score > 80;
```
接下来的练习涉及到三个表:`project`(项目)、`contract`(合同)和`pay`(付款)。这些练习展示了如何处理多表连接和聚合函数。
第二个问题要求列出各个项目的合同金额总数。`project`表包含项目ID和项目名称,`contract`表有合同ID、项目ID和合同金额。我们需要通过`LEFT JOIN`将`project`与`contract`连接,然后按项目ID`project_id`分组,使用`SUM()`计算每组的`money`总和。正确答案是:
```sql
SELECT project.name, SUM(contract.money) AS total_money
FROM project
LEFT JOIN contract ON project.id = contract.project_id
GROUP BY project.name;
```
第三个问题是列出ID为1的项目所有已付款的记录。这需要同时考虑`contract`和`pay`表。`pay`表记录了合同ID和付款金额,所以我们需要找到合同ID与项目ID为1的记录匹配的合同。正确答案是:
```sql
SELECT *
FROM contract, pay
WHERE contract.id = pay.contract_id
AND contract.project_id = 1;
```
第四个问题要求列出所有已有付款记录的合同及其对应的项目。这需要找出存在于`pay`表中的合同ID,然后将这些合同ID与`contract`表和`project`表连接。正确答案是:
```sql
SELECT *
FROM project, contract
WHERE contract.project_id = project.id
AND contract.id IN (SELECT contract_id FROM pay);
```
最后,练习提到了`student`表和`score`表,但没有提供具体的问题。通常,这两个表可以用于查询学生的成绩信息,例如找出平均分最高的学生、按课程平均分排序等。
通过这些练习,我们可以深入理解SQL中的分组、聚合函数、连接查询以及子查询的运用,这些都是在实际工作中处理复杂数据查询时不可或缺的技能。对于有一定基础的MySQL学习者或工作一年左右的数据库管理员来说,这些练习能有效提升问题解决能力,对于刚入门的学习者来说,通过思考和讨论也能加深对SQL的理解。
2024-02-22 上传
133 浏览量
点击了解资源详情
215 浏览量
2024-08-09 上传
121 浏览量
178 浏览量
129 浏览量
点击了解资源详情

Rsun04551
- 粉丝: 454
最新资源
- 多技术领域源码集锦:园林绿化官网企业项目
- 定制特色井字游戏Tic Tac Toe开源发布
- TechNowHorse:Python 3编写的跨平台RAT生成器
- VB.NET实现程序自动更新的模块设计与应用
- ImportREC:强大输入表修复工具的介绍
- 高效处理文件名后缀:脚本批量添加与移除教程
- 乐phone 3GW100体验版ROM深度解析与优化
- Rust打造的cursive_table_view终端UI组件
- 安装Oracle必备组件libaio-devel-0.3.105-2下载
- 探索认知语言连接AI的开源实践
- 微软SAPI5.4实现的TTSApp语音合成软件教程
- 双侧布局日历与时间显示技术解析
- Vue与Echarts结合实现H5数据可视化
- KataSuperHeroesKotlin:提升Android开发者的Kotlin UI测试技能
- 正方安卓成绩查询系统:轻松获取课程与成绩
- 微信小程序在保险行业的应用设计与开发资源包