題目:
有一個全部員工的薪水表salaries簡況如下:

C7D94B6C9124C45835451E89458FFC3E
有一個各個部門的上司表dept_manager簡況如下:
24EC0AAEA6EF7D01BD63D4F9CCFC42BF
請你查找各個部門目前上司的薪水詳情以及其對應部門編号dept_no,輸出結果以salaries.emp_no升序排序,并且請注意輸出結果裡面dept_no列是最後一列,以上例子輸出如下:
4AD4F3D1E977477D6DF98854EC10149D
表結構:資料表
drop table if exists `salaries` ;
drop table if exists `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`));
複制
模拟資料:
INSERT INTO dept_manager VALUES('d001',10002,'9999-01-01');
INSERT INTO dept_manager VALUES('d002',10006,'9999-01-01');
INSERT INTO dept_manager VALUES('d003',10005,'9999-01-01');
INSERT INTO dept_manager VALUES('d004',10004,'9999-01-01');
INSERT INTO salaries VALUES(10001,88958,'2002-06-22','9999-01-01');
INSERT INTO salaries VALUES(10002,72527,'2001-08-02','9999-01-01');
INSERT INTO salaries VALUES(10003,43311,'2001-12-01','9999-01-01');
INSERT INTO salaries VALUES(10004,74057,'2001-11-27','9999-01-01');
INSERT INTO salaries VALUES(10005,94692,'2001-09-09','9999-01-01');
INSERT INTO salaries VALUES(10006,43311,'2001-08-02','9999-01-01');
INSERT INTO salaries VALUES(10007,88070,'2002-02-07','9999-01-01');
複制
解題思路:
- 此題是查詢部門上司的薪資流水表。是以我們以薪資流水為主表,去比對部門上司表,如果存在部門上司就查詢薪資流水,沒有就不查詢,是以考慮使用内連接配接查詢。
- 這裡查詢的是目前的時間,是以需要考慮到這一點。
參考答案:
select a.*, b.dept_no from salaries a inner join dept_manager b
on a.emp_no = b.emp_no
where a.to_date = '9999-01-01'
order by a.emp_no asc;
複制