MySQL进阶实战:解密复杂查询
需积分: 14 158 浏览量
更新于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 浏览量
121 浏览量
2024-08-09 上传
2024-11-09 上传
193 浏览量
2024-07-26 上传
2025-01-10 上传
318 浏览量

Rsun04551
- 粉丝: 454
最新资源
- 利用SuperMap C++组件在Qt环境下自定义地图绘制技巧
- Portapps:Windows便携应用集合的介绍与使用
- MATLAB编程:模拟退火至神经网络算法合集
- 维美短信接口SDK与API文档详解
- Python实现简易21点游戏教程
- 一行代码实现Swift动画效果
- 手机商城零食网页项目源码下载与学习指南
- Maven集成JCenter存储库的步骤及配置
- 西门子2012年3月8日授权软件安装指南
- 高效测试Xamarin.Forms应用:使用FormsTest库进行自动化测试
- 深入金山卫士开源代码项目:学习C语言与C++实践
- C#简易贪食蛇游戏编程及扩展指南
- 企业级HTML5网页模板及相关技术源代码包
- Jive SDP解析器:无需额外依赖的Java SDP解析解决方案
- Ruby定时调度工具rufus-scheduler深度解析
- 自定义Android AutoCompleteTextView的实践指南