SQL16 统计出当前各个title类型对应的员工当前薪水对应的平均工资
select t.title,avg(s.salary) as sa from titles t join salaries s on t.emp_no = s.emp_no group by t.title order by sa
SQL17 获取当前薪水第二多的员工的emp_no以及其对应的薪水salary
select emp_no,salary from salaries where salary = (select salary from salaries order by salary desc limit 1,1)
select emp_no,salary from salaries where salary = (select max(salary) from salaries where salary < (select max(salary) from salaries))
解题思路:本题难点在于如何找出薪水排第二的员工,使用子查询里嵌套子查询。
①先在工资表里找出最多工资,再以工资小于最大工资为限定条件,即salary < (select max(salary)可以得到排名第二的工资。
②再使用max(salary)在除去排名第一工资的表里找最大的工资,即找到排名第二的工资。
③这个写法,不管工资第一多的员工有多少个,都能查到工资第二多的员工,且当工资第二多的员工有多个时,也都能查询出来,可以插入数据验证。
SQL18 获取当前薪水第二多的员工的emp_no以及其对应的薪水salary
select e.emp_no, s.salary, e.last_name, e.first_name from employees e inner join salaries s on e.emp_no = s.emp_no where s.salary = (select max(salary) from salaries where salary < (select max(salary) from salaries))
解题思路:本题只需要在上一题的基础上增加一个内联结(左联结)即可将薪水salary、last_name以及first_name查询出来
SQL19 查找所有员工的last_name和first_name以及对应的dept_name
select e.last_name, e.first_name, ds.dept_namefrom employees e left join dept_emp de on e.emp_no = de.emp_noleft join departments ds on de.dept_no = ds.dept_no
解题思路:本题关键在于理清三表之间关联关系。需要使用两次左联结。