MySQL进阶实战:解密复杂查询
需积分: 14 176 浏览量
更新于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 上传
2015-11-12 上传
点击了解资源详情
2024-08-09 上传
2009-09-10 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
Rsun04551
- 粉丝: 432
- 资源: 10
最新资源
- Android圆角进度条控件的设计与应用
- mui框架实现带侧边栏的响应式布局
- Android仿知乎横线直线进度条实现教程
- SSM选课系统实现:Spring+SpringMVC+MyBatis源码剖析
- 使用JavaScript开发的流星待办事项应用
- Google Code Jam 2015竞赛回顾与Java编程实践
- Angular 2与NW.js集成:通过Webpack和Gulp构建环境详解
- OneDayTripPlanner:数字化城市旅游活动规划助手
- TinySTM 轻量级原子操作库的详细介绍与安装指南
- 模拟PHP序列化:JavaScript实现序列化与反序列化技术
- ***进销存系统全面功能介绍与开发指南
- 掌握Clojure命名空间的正确重新加载技巧
- 免费获取VMD模态分解Matlab源代码与案例数据
- BuglyEasyToUnity最新更新优化:简化Unity开发者接入流程
- Android学生俱乐部项目任务2解析与实践
- 掌握Elixir语言构建高效分布式网络爬虫