本书《MySQL习题集》精选了34道经典题目,覆盖了SQL基础到高级应用的各个层面,旨在帮助读者通过实践加深对MySQL数据库的理解与掌握。
此练习题适用于本人的MySQL讲解专栏,并配套使用nanxi.sql文件进行实践,在该文件中有所有题目所需的数据。
适合人群:
初学mysql的所有人、已经系统学习过mysql的人群,以及有基础想要测试自己掌握程度的人都可以尝试。
能学到什么:
建议在没有任何笔记的情况下独立完成这些练习题,这有助于巩固基础知识并查漏补缺。这些问题都是基础难度的题目,其中有一道面试题稍难一些。适合新手。
阅读建议:
如果有任何不明白的地方欢迎私信博主询问,后续会在mysql专栏中发布文章详细讲解这些问题,请期待!
MySQL练习题涵盖了从简单到复杂的查询技巧,旨在帮助初学者巩固基础知识并熟练掌握数据库操作。以下是对这些题目的一些解析:
1. **取得每个部门最高薪水的人员名称**:
这个问题可以通过`GROUP BY`与`MAX`函数结合解决,找出每个部门中最高的薪水,并连接员工表获取对应的姓名。
2. **哪些人的薪水在他们所在部门平均值之上**:
首先计算出所有部门的平均薪资水平,然后比较每位员工的实际工资。使用`HAVING`子句来筛选符合条件的数据行。
3. **取得每个部门中(所有人)的平均薪水等级**:
考虑到可能需要预先定义或根据某个标准划分不同的薪酬级别,可以结合使用`AVG()`函数和条件语句(`CASE`)实现计算目的。
4. **不用组函数(Max),获取最高薪资**:
这一题可以通过排序(ORDER BY)并限制结果集大小的方法来完成而不需要用到`MAX`函数。
5. **找出平均薪水最高的部门的编号**:
使用`GROUP BY`和`AVG()`计算每个部门的平均工资,接着通过排序找到其中数值最大的那个部门,并使用LIMIT获取其编号。
6. **取得平均薪资最高部门的名字**:
结合上一题的结果查询该部门的信息以得到名字。
7. **求出最低平均薪水等级所在的部门名称**:
相反地,可以利用`ORDER BY AVG(salary)`升序排序来找到拥有最小平均工资的那一个部门,并获取它的编号和名称。
8. **找出比普通员工(即没有出现在mgr字段中的)最高薪资还要高的领导姓名**:
首先确定哪些人不是其他人的主管(通过检查是否在mgr列中出现),然后从这些人里挑出薪水最高的,最后再找到所有超过这个数值的领导者名字。
9. **列出前五名收入最高的员工名称和工资**:
使用`ORDER BY`按薪资降序排列,并用LIMIT限制结果集只显示最前面五个记录。
10. **获取第六到第十位最高薪金者的详细信息**:
类似于上一题,但是这次需要从第6个开始计数并且同样使用LIMIT来限定返回的数量为5条。
11. **列出最后五名入职的员工名称和日期**:
根据雇佣时间字段(假设存在)进行降序排列,并选取前五个结果作为答案。
12. **统计每个薪酬级别的员工数量**:
需要定义好什么样的工资范围对应哪些级别,可以通过`CASE WHEN THEN ELSE END CASE`语句来实现分级处理。之后再用COUNT函数计算每级的具体人数。
面试题部分基于学生、课程和选修课表的数据结构:
1. **找出没有参加黎明老师任何一堂课的所有学生的姓名**:
可以使用NOT EXISTS或LEFT JOIN联合IS NULL条件来查询未在黎明老师的课堂出现的学生名单。
2. **列出至少两门科目不及格且平均分低于某个标准值所有学生的名字及他们的总体成绩和课程数**:
需要定义一个分数界限,然后分别统计每位学生的总评分以及选课数量。最后筛选出满足条件的那部分人。
3. **找出同时修读了编号为1号与2号两门课程的所有同学姓名**:
可以通过两次使用`INNER JOIN`或多次用EXISTS语句来验证某个学生是否选择了这两门特定科目。
这些问题覆盖了一系列基本SQL命令,如SELECT, FROM, WHERE, GROUP BY, JOIN, ORDER BY, LIMIT等,并且涉及到了子查询和连接操作。完成这些题目有助于提升对MySQL语法的理解与应用能力。建议在实践时先独立思考尝试编写正确的SQL语句,在遇到难题时查阅相关资料或寻求帮助以提高解决问题的能力。