一、知识点汇总

这题主要的知识点就是对join的应用,考察对不同连接的理解。
左,右,内,外全连接:
左连接:表1 left join 表2 on 表1.字段=表2.字段  (以表1为准,表2进行匹配)
右连接:表1 right join 表2 on 表1.字段=表2.字段  (以表2为准,表1进行匹配)
全连接:表1 union all 表2 (表1 和表2的列数必须一样多,union 去除重复项,union all 不剔除重复项)
内连接:表1 inner join 表2(取表1和表2相交部分)
外连接:表1 full outer join 表2 (取表1和表2不相交的部分)

二、题目理解

获取员工其当前的薪水比其manager当前薪水还高的相关信息
本质是对比员工薪资和经理薪资进行对比,分成两步即可完成题目。
1、首先需要建立员工薪资表和经理薪资表
2、剔除经理以及选择薪资高于其经理的员工
  • 剔除经理:员工表信息的员工ID<>经理信息表的员工ID 
  • 薪资比经理高的员工:员工表信息的薪水>经理信息表的薪水

三、解题步骤

STEP1:建立员工薪资表和经理薪资表
#员工薪资表
SELECT emp_no,dept_no,salary FROM dept_emp JOIN salaries USING(emp_no);
#经理薪资表 SELECT emp_no,dept_no,salary FROM dept_manager JOIN salaries USING(emp_no);


STEP2(完整代码):关联两张表,并剔除经理以及薪资低于其经理的员工
WITH t1 AS(SELECT emp_no,dept_no,salary FROM dept_emp JOIN salaries USING(emp_no)),#员工薪资表
t2 AS(SELECT emp_no,dept_no,salary FROM dept_manager JOIN salaries USING(emp_no)) #经理薪资表

SELECT t1.emp_no AS emp_no ,t2.emp_no AS manager_no,t1.salary AS emp_salary,t2.salary AS manager_salary
FROM t1 LEFT JOIN t2 USING(dept_no)
WHERE t1.emp_no<>t2.emp_no AND t1.salary>t2.salary;