描述
有一个全部员工的薪水表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 升序。