描述
有一个全部员工的薪水表salaries简况如下:
有一个各个部门的领导表dept_manager简况如下:
建表语句如下:
CREATE TABLE salaries
(emp_no
int(11) NOT NULL,salary
int(11) NOT NULL,from_date
date NOT NULL,to_date
date NOT NULL,
PRIMARY KEY (emp_no
,from_date
));
CREATE TABLE dept_manager
(dept_no
char(4) NOT NULL,emp_no
int(11) NOT NULL,to_date
date NOT NULL,
PRIMARY KEY (emp_no
,dept_no
));
请你查找各个部门当前领导的薪水详情以及其对应部门编号dept_no,输出结果以salaries.emp_no升序排序,并且请注意输出结果里面dept_no列是最后一列,以上例子输出如下:
SELECT s.*,d.dept_no
FROM salaries s LEFT JOIN dept_manager d
on s.emp_no = d.emp_no
WHERE s.to_date='9999-01-01' and d.to_date='9999-01-01'
ORDER BY s.emp_no
SELECT s.*,d.dept_no
//从上图中看出,salaries 表的结果全都要,并且呈现在左边,而dept_manager 只需要呈现dept_no
FROM salaries s LEFT JOIN dept_manager d 因为salaries 表的结果在左边,dept_manager 表的结果在右边,所以这里使用了salaries 左连接右表
on s.emp_no = d.emp_no //题目中给到的条件:查询每个员工对应的薪水,那么这个就是连接两张表的条件了。
WHERE s.to_date='9999-01-01' and d.to_date='9999-01-01'
//这个to_date 是离职日期,而题目要求的是当前领导的薪水,也就是还没有离职的领导的薪水,而to_date='9999-01-01' 就相当于当前领导还没有离职
,所以这位领导的薪水才是有效的。并且不能用 s.to_date = d.to_date,还是那句话:如果这个领导离职了,那么两张表的to_date 就会是一样的了,然后返回答案时就不会当前在职领导的薪水了。
ORDER BY s.emp_no //题目要求按照emp_no 升序。