題目描述:
查詢各個部門當前(to_date='9999-01-01')領導當前薪水詳情以及其對應部門編號dept_no
create table `dept_manager` (
`dept_no` char(4) not null,
`emp_no` int(11) not null,
`from_date` date not null,
`to_date` date not null,
primary key (`emp_no`,`dept_no`));
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`));
輸出描述:
emp_no
salary
from_date
to_date
dept_no
10002
72527
2001-08-02
9999-01-01
d001
10004
74057
2001-11-27
9999-01-01
d004
10005
94692
2001-09-09
9999-01-01
d003
10006
43311
2001-08-02
9999-01-01
d002
10010
94409
2001-11-23
9999-01-01
d006
解析思路:
題目總共有兩張表,dept_manager為部門領導表,salaries為領導薪資表,首先可以知道的是,dept_manager表中可能包含了,每個部門的所有領導(包括以往領導和現任領導),而salaries同樣可能包含了,以往員工的薪資和現任在職的員工薪資。而題目中想要查詢出各個部門現任領導的薪資,那麼根據題意知道現任也就是to_date='9999-01-01',那麼只需要先在dept_manager表中查詢to_date='9999-01-01'的領導emp_no(員工編號),也就是查詢出了各個部門當前任職的所有領導資訊,然後我們在拿emp_no對應salaries找出對應薪資,注意這裡還要對salaries表加乙個條件,就是to_date='9999-01-01',因為一名領導可能在公司存在公升職加薪的情況,也就是可能有多條薪資記錄,然而我們要找出的是此時的薪資。
執行sql如下:
select tb1.emp_no, tb1.salary, tb1.from_date, tb1.to_date, tb2.dept_no from salaries tb1 inner join (select emp_no, dept_no from dept_manager where to_date = "9999-01-01") tb2 on tb1.emp_no = tb2.emp_no and tb1.to_date = "9999-01-01";
或者
select tb1.emp_no, tb1.salary, tb1.from_date, tb1.to_date, tb2.dept_no from salaries tb1 inner join dept_manager tb2 on tb1.emp_no = tb2.emp_no and tb1.to_date = "9999-01-01" and tb2.to_date = "9999-01-01";
這裡使用內連線查詢代替where多表查詢,來避免產生笛卡兒積的效能問題。 3 查詢當前薪水詳情以及部門編號dept no
題目描述 查詢各個部門當前 to date 9999 01 01 領導當前薪水詳情以及其對應部門編號dept no create table dept manager dept no char 4 not null,emp no int 11 not null,from date date not ...
查詢當前薪水詳情以及部門編號dept no
查詢各個部門當前 to date 9999 01 01 領導當前薪水詳情以及其對應部門編號dept no create table dept manager dept no char 4 not null,emp no int 11 not null,from date date not null,...
查詢當前薪水詳情以及部門編號dept no
查詢各個部門當前 to date 9999 01 01 領導當前薪水詳情以及其對應部門編號dept no create table dept manager dept no char 4 not null,emp no int 11 not null,from date date not null,...