MySQL練習(xí)是一:查找當(dāng)前薪水詳情以及部門(mén)編號(hào)dept_no
題目:
有一個(gè)全部員工的薪水表salaries簡(jiǎn)況如下:

有一個(gè)各個(gè)部門(mén)的領(lǐng)導(dǎo)表dept_manager簡(jiǎn)況如下:

請(qǐng)你查找各個(gè)部門(mén)當(dāng)前領(lǐng)導(dǎo)的薪水詳情以及其對(duì)應(yīng)部門(mén)編號(hào)dept_no,輸出結(jié)果以salaries.emp_no升序排序,并且請(qǐng)注意輸出結(jié)果里面dept_no列是最后一列,以上例子輸出如下:

表結(jié)構(gòu):數(shù)據(jù)表
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`));
模擬數(shù)據(jù):
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');
解題思路:
此題是查詢部門(mén)領(lǐng)導(dǎo)的薪資流水表。因此我們以薪資流水為主表,去匹配部門(mén)領(lǐng)導(dǎo)表,如果存在部門(mén)領(lǐng)導(dǎo)就查詢薪資流水,沒(méi)有就不查詢,因此考慮使用內(nèi)連接查詢。
這里查詢的是當(dāng)前的時(shí)間,因此需要考慮到這一點(diǎn)。
參考答案:
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;
評(píng)論
圖片
表情
