学习mysql也有两三个星期了,期间也刷了sqlzoo上的题,以及面试题。贴一下之前刷面试题过程,自己的思路,不断激励自己
一数据表
主要有三个表:emp员工表,dept部门表,salgrade薪水等级表salgrade薪水等级表
每个表的数据如下
emp表
dept部门表
salgrade薪水等级表
二题目
1 取得每个部门最高薪水的人员名称
主要思路:先查询每个部门(部门编号),最高薪水然后按照部门分组的结果
作为临时表;再查询人员名称(将emp表与临时表连接)并且当emp表的员工薪水等于t表的最高薪水的员工就是要查询的结果
注意的是需要按部门编号排序,不然查询结果可能是乱序的
结果
2、查询哪些人的薪水在部门平均水平之上
主要思路:先按部门查询部门平均薪水,将这个结果作为临时表,
在与emp连接,查出哪些员工的薪水大于平均薪水即可(可以使用round函数对结果取两位小数位数)
结果
3 1取得部门中(所有人)平均薪水等级
解题思路:先求各个部门所有人的平均薪水(emp)作为临时表,在与薪水等级表进行连接查出对应的薪水等级
结果
3.2求出部门中(所有人)平均的薪水等级
解题思路:先求出每个人的薪水等级(与salgrade薪水等级表连接)
再按照部门输出各个部门平均的薪水等级
结果
4.不准用组函数(max),取得最高薪水
解题思路最高薪水可以是将薪水降序排序,排名第一的。
结果
5.取得平均薪水最高的部门的部门编号
解题思路
先求出各个部门的平均薪水,按照薪水降序排取第一
结果
6.取得平均薪水最高的部门的部门名称
解题思路:在5的基础上(求得平均薪水最高的部门编号),与部门表(dept)连接,查询出对应的部门名称
结果
7求平均薪水的等级最低的部门的部门名称
解题思路,
根据部门求最低平均薪水,与薪水表连接查询等级,(按照平均升序排第一为所求的部门编号)作为临时表,与薪水等级,部门表表连接查询出对应的部门名称
结果
根据emp表看出经理同时属于员工,先查出经理是哪些员工,在根据薪水进行比较
9 取得薪水最高的前五名员工
解题思路主要是limit用法
结果
10 取得薪水最高第六到第十名员工
解题思路还是limit用法
结果
11、取得最后入职的五名员工
解题思路:最后入职的五名员工即入职日期最大的前五名员工,还是limit
结果
12取得每个薪水等级有多少员工
先查出员工的薪水等级,按照等级分组 ,利用count函数计算人数
结果
14、列出所有员工及其领导的名字
经理是员工所以也有员工号码,相当于在同一张表查询
结果
15、列出受雇日期早于其直接上级领导的所有员工编号、姓名
部分结果
16、列出部门名称和这些部门的员工信息,同时列出没有员工的部门名称
解题:从dept表找出部门名称即可,没有员工的部门名称,说明所有部门都要包含,注意可能需要用到左连接或者右连接
结果(发现有一个部门没有员工)
17、列出至少有三个员工的所有部门名称
解题思路:与上题一致,需要把所有部门包含,根据部门名称分组后,统计员工信息满足大于等于3即可
结果为
18、列出薪金比‘simith’多的所有员工信息
部分结果
19、列出所有‘clerk’(办事员)的姓名及部门名称,部门人数
结果
20、列出最低薪金大于1500的各种工作及从事此工作的全部雇员人数
结果