SQL218. 获取所有非manager员工当前的薪水情况
描述
emp_no | birth_date | first_name | last_name | gender | hire_date |
10001 | 1953-09-02 | Georgi | Facello | M | 1986-06-26 |
10002 | 1964-06-02 | Bezalel | Simmel | F | 1996-08-03 |
emp_no | dept_no | from_date | to_date |
10001 | d001 | 1986-06-26 | 9999-01-01 |
10002 | d001 | 1996-08-03 | 9999-01-01 |
dept_no | emp_no | from_date | to_date |
d001 | 10002 | 1996-08-03 | 9999-01-01 |
emp_no | salary | from_date | to_date |
10001 | 88958 | 1986-06-26 | 9999-01-01 |
10002 | 72527 | 1996-08-03 | 9999-01-01 |
dept_no | emp_no | salary |
d001 | 10001 | 88958 |
示例1
输入:
drop table if exists `dept_emp` ; drop table if exists `dept_manager` ; drop table if exists `employees` ; drop table if exists `salaries` ; CREATE TABLE `dept_emp` ( `emp_no` int(11) NOT NULL, `dept_no` char(4) NOT NULL, `from_date` date NOT NULL, `to_date` date NOT NULL, PRIMARY KEY (`emp_no`,`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 `employees` ( `emp_no` int(11) NOT NULL, `birth_date` date NOT NULL, `first_name` varchar(14) NOT NULL, `last_name` varchar(16) NOT NULL, `gender` char(1) NOT NULL, `hire_date` date NOT NULL, PRIMARY KEY (`emp_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`)); INSERT INTO dept_emp VALUES(10001,'d001','1986-06-26','9999-01-01'); INSERT INTO dept_emp VALUES(10002,'d001','1996-08-03','9999-01-01'); INSERT INTO dept_manager VALUES('d001',10002,'1996-08-03','9999-01-01'); INSERT INTO employees VALUES(10001,'1953-09-02','Georgi','Facello','M','1986-06-26'); INSERT INTO employees VALUES(10002,'1964-06-02','Bezalel','Simmel','F','1996-08-03'); INSERT INTO salaries VALUES(10001,88958,'1986-06-26','9999-01-01'); INSERT INTO salaries VALUES(10002,72527,'1996-08-03','9999-01-01');
输出:
d001|10001|88958
Sqlite 解法, 执行用时: 10ms, 内存消耗: 3352KB, 提交时间: 2021-09-07
select t1.dept_no,t1.emp_no,s.salary from ( select dept_no,emp_no from dept_emp d where d.emp_no not in ( select emp_no from dept_manager dm ) )t1 inner join salaries s on t1.emp_no=s.emp_no
Sqlite 解法, 执行用时: 10ms, 内存消耗: 3364KB, 提交时间: 2022-01-25
select de.dept_no,e.emp_no ,s.salary from employees e left join dept_emp de on e.emp_no=de.emp_no left join salaries s on e.emp_no=s.emp_no where e.emp_no not in (select emp_no from dept_manager)
Sqlite 解法, 执行用时: 10ms, 内存消耗: 3364KB, 提交时间: 2021-09-12
select a.dept_no, a.emp_no, b.salary from dept_emp a, salaries b where a.emp_no=b.emp_no and a.emp_no not in ( select emp_no from dept_manager )
Sqlite 解法, 执行用时: 10ms, 内存消耗: 3364KB, 提交时间: 2021-09-05
select b.dept_no,b.emp_no,a.salary from salaries a,dept_emp b where a.emp_no = b.emp_no and a.emp_no not in( select emp_no from dept_manager)
Sqlite 解法, 执行用时: 10ms, 内存消耗: 3368KB, 提交时间: 2021-09-16
SELECT de.dept_no, de.emp_no, s.salary FROM dept_emp de INNER JOIN salaries s ON de.emp_no = s.emp_no WHERE de.emp_no NOT IN ( SELECT dm.emp_no FROM dept_manager dm);