学习mysql也有两三个星期了,期间也刷了sqlzoo上的题,以及面试题。贴一下之前刷面试题过程,自己的思路,不断激励自己

一数据表

主要有三个表:emp员工表,dept部门表,salgrade薪水等级表salgrade薪水等级表

每个表的数据如下

emp表




mysql职工工资数据库 mysql工资表_连接查询


dept部门表


mysql职工工资数据库 mysql工资表_表连接_02


salgrade薪水等级表


mysql职工工资数据库 mysql工资表_mysql limit用法_03


二题目

1 取得每个部门最高薪水的人员名称

主要思路:先查询每个部门(部门编号),最高薪水然后按照部门分组的结果

作为临时表;再查询人员名称(将emp表与临时表连接)并且当emp表的员工薪水等于t表的最高薪水的员工就是要查询的结果

注意的是需要按部门编号排序,不然查询结果可能是乱序的


mysql职工工资数据库 mysql工资表_mysql职工工资数据库_04


结果


mysql职工工资数据库 mysql工资表_连接查询_05


2、查询哪些人的薪水在部门平均水平之上

主要思路:先按部门查询部门平均薪水,将这个结果作为临时表,

在与emp连接,查出哪些员工的薪水大于平均薪水即可(可以使用round函数对结果取两位小数位数)


mysql职工工资数据库 mysql工资表_升序_06


结果


mysql职工工资数据库 mysql工资表_mysql limit用法_07


3 1取得部门中(所有人)平均薪水等级

解题思路:先求各个部门所有人的平均薪水(emp)作为临时表,在与薪水等级表进行连接查出对应的薪水等级


mysql职工工资数据库 mysql工资表_mysql limit用法_08


结果


mysql职工工资数据库 mysql工资表_连接查询_09


3.2求出部门中(所有人)平均的薪水等级

解题思路:先求出每个人的薪水等级(与salgrade薪水等级表连接)

再按照部门输出各个部门平均的薪水等级


mysql职工工资数据库 mysql工资表_连接查询_10


结果


mysql职工工资数据库 mysql工资表_连接查询_11


4.不准用组函数(max),取得最高薪水

解题思路最高薪水可以是将薪水降序排序,排名第一的。


mysql职工工资数据库 mysql工资表_mysql职工工资数据库_12


结果


mysql职工工资数据库 mysql工资表_表连接_13


5.取得平均薪水最高的部门的部门编号

解题思路

先求出各个部门的平均薪水,按照薪水降序排取第一


mysql职工工资数据库 mysql工资表_连接查询_14


结果


mysql职工工资数据库 mysql工资表_表连接_15


6.取得平均薪水最高的部门的部门名称

解题思路:在5的基础上(求得平均薪水最高的部门编号),与部门表(dept)连接,查询出对应的部门名称


mysql职工工资数据库 mysql工资表_连接查询_16


结果


mysql职工工资数据库 mysql工资表_表连接_17


7求平均薪水的等级最低的部门的部门名称

解题思路,

根据部门求最低平均薪水,与薪水表连接查询等级,(按照平均升序排第一为所求的部门编号)作为临时表,与薪水等级,部门表表连接查询出对应的部门名称


mysql职工工资数据库 mysql工资表_mysql limit用法_18


结果


mysql职工工资数据库 mysql工资表_连接查询_19


根据emp表看出经理同时属于员工,先查出经理是哪些员工,在根据薪水进行比较

9 取得薪水最高的前五名员工

解题思路主要是limit用法


mysql职工工资数据库 mysql工资表_表连接_20


结果


mysql职工工资数据库 mysql工资表_连接查询_21


10 取得薪水最高第六到第十名员工

解题思路还是limit用法


mysql职工工资数据库 mysql工资表_升序_22


结果


mysql职工工资数据库 mysql工资表_连接查询_23


11、取得最后入职的五名员工

解题思路:最后入职的五名员工即入职日期最大的前五名员工,还是limit


mysql职工工资数据库 mysql工资表_mysql limit用法_24


结果


mysql职工工资数据库 mysql工资表_mysql职工工资数据库_25


12取得每个薪水等级有多少员工

先查出员工的薪水等级,按照等级分组 ,利用count函数计算人数


mysql职工工资数据库 mysql工资表_连接查询_26


结果


mysql职工工资数据库 mysql工资表_mysql limit用法_27


14、列出所有员工及其领导的名字

经理是员工所以也有员工号码,相当于在同一张表查询


mysql职工工资数据库 mysql工资表_升序_28


结果


mysql职工工资数据库 mysql工资表_mysql职工工资数据库_29


15、列出受雇日期早于其直接上级领导的所有员工编号、姓名


mysql职工工资数据库 mysql工资表_mysql limit用法_30


部分结果


mysql职工工资数据库 mysql工资表_升序_31


16、列出部门名称和这些部门的员工信息,同时列出没有员工的部门名称

解题:从dept表找出部门名称即可,没有员工的部门名称,说明所有部门都要包含,注意可能需要用到左连接或者右连接


mysql职工工资数据库 mysql工资表_mysql职工工资数据库_32


结果(发现有一个部门没有员工)


mysql职工工资数据库 mysql工资表_表连接_33


mysql职工工资数据库 mysql工资表_表连接_34


17、列出至少有三个员工的所有部门名称

解题思路:与上题一致,需要把所有部门包含,根据部门名称分组后,统计员工信息满足大于等于3即可


mysql职工工资数据库 mysql工资表_升序_35


结果为


mysql职工工资数据库 mysql工资表_mysql limit用法_36


18、列出薪金比‘simith’多的所有员工信息


mysql职工工资数据库 mysql工资表_连接查询_37


部分结果


mysql职工工资数据库 mysql工资表_连接查询_38


19、列出所有‘clerk’(办事员)的姓名及部门名称,部门人数


mysql职工工资数据库 mysql工资表_表连接_39


结果


mysql职工工资数据库 mysql工资表_表连接_40


20、列出最低薪金大于1500的各种工作及从事此工作的全部雇员人数


mysql职工工资数据库 mysql工资表_表连接_41


结果


mysql职工工资数据库 mysql工资表_表连接_42