MySQL数据库练习题主要涵盖了许多关于SQL查询的基本和高级概念,如聚合函数、子查询、连接、排序、分组等。以下是对题目中涉及知识点的详细解释:
1. **最高薪水的人员**:需要使用`MAX(salary)`和`JOIN`来获取每个部门最高薪水的员工名称。
2. **薪水高于部门平均值的员工**:可以先计算每个部门的平均薪水,然后用`WHERE`语句筛选出薪水高于平均值的员工。
3. **部门平均薪水等级**:需要计算薪水等级的平均值,可能需要用到嵌套查询或者窗口函数。
4. **不使用MAX取最高薪水**:可以通过子查询或`ORDER BY`和`LIMIT`来实现,例如,找出每个部门薪水最高的员工,而不直接使用`MAX`。
5. **平均薪水最高的部门编号**:可以先计算每个部门的平均薪水,然后用`ORDER BY AVG(salary) DESC`找到最高平均薪水的部门。
6. **平均薪水最高的部门名称**:结合第5题的方法,再用`JOIN`获取部门名称。
7. **平均薪水等级最低的部门名称**:需要先定义薪水等级,然后找出平均等级最低的部门。
8. **比普通员工最高薪水高的领导人**:这里涉及自连接,找出没有作为下属的员工(即不是经理),然后比较他们的薪水。
9. **薪水最高的前五名员工**:使用`ORDER BY salary DESC`和`LIMIT 5`。
10. **薪水最高的第六到第十名员工**:结合上一题,`LIMIT 5 OFFSET 5`。
11. **最后入职的五名员工**:根据`hire_date`排序并取最后五个。
12. **每个薪水等级的员工数量**:通过`GROUP BY`薪水等级,计数每个等级的员工数。
13. **S、C、SC表的问题**:
- 问题1:使用`NOT EXISTS`子查询找出未选过黎明老师课程的学生。
- 问题2:利用`GROUP BY`和条件筛选出两门以上不及格课程的学生,计算平均成绩。
- 问题3:使用`INNER JOIN`找出同时选了1号和2号课程的学生。
14. **列出所有员工及领导的姓名**:可能需要自连接,找出所有员工及其直接领导。
15. **雇用日期早于其直接上级的员工**:使用`JOIN`和`WHERE`条件判断雇用日期。
16. **部门信息和员工信息,包括没有员工的部门**:`LEFT JOIN`部门和员工表,处理NULL值。
17. **列出至少有5个员工的部门**:`GROUP BY`部门并使用`HAVING COUNT(*) >= 5`。
18. **薪金比"SMITH"多的员工**:使用`WHERE salary > (SELECT salary FROM employees WHERE name = 'SMITH')`。
19. **"CLERK"及其部门和人数**:`JOIN`部门表,`GROUP BY`职位和部门,计数人数。
20. **最低薪金大于1500的工作和人数**:`GROUP BY job`,计算满足条件的员工数。
21. **在"SALES"部门的员工**:可能需要查找部门名称,然后筛选出对应员工。
22. **高于公司平均薪金的员工信息**:先计算平均薪水,然后筛选。
23. **与"SCOTT"从事相同工作的员工**:查找相同职位的员工。
24. **等于部门30薪水的员工**:`JOIN`和`WHERE`条件筛选。
25. **高于部门30所有员工的员工**:使用子查询找到部门30的最高薪水,然后筛选。
26. **每个部门的员工数量、平均工资和平均服务期限**:`GROUP BY`部门,计算平均值和计数。
27. **所有员工的姓名、部门和工资**:简单`JOIN`查询。
28. **部门详细信息和人数**:包含部门信息和`COUNT(*)`。
29. **最低工资和员工人数**:`GROUP BY`工作,找到最低工资。
30. **MANAGER的最低薪金**:对每个部门的经理找最低薪金。
31. **员工年工资排序**:计算年工资,`ORDER BY`排序。
32. **员工领导薪水超过3000**:`JOIN`查询,条件判断领导薪水。
33. **特定字符部门的工资合计和人数**:`LIKE`操作符用于筛选部门名称,然后计算。
34. **给任职超过30年的员工加薪10%**:更新语句,检查任职日期,增加薪水。
这些练习题覆盖了SQL的广泛领域,包括基础查询、连接、分组、子查询、排序、条件运算等,是学习和提高MySQL技能的好材料。