获取所有非manager的员工emp_no

个人网站

文章首发于公众号小肖学数据分析

题目来自牛客网

描述

有一个员工表employees简况如下:

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 1985-11-21
10003 1959-12-03 Parto Bamford M 1986-08-28

有一个部门领导表dept_manager简况如下:

dept_no emp_no from_date to_date
d001 10002 1996-08-03 9999-01-01
d002 10003 1990-08-05 9999-01-01

请你找出所有非部门领导的员工emp_no,以上例子输出:

emp_no
10001

解题思路:

方案1: 员工表员工id不在部门表内

方案2: 采用左连接 ,取部门表数据为空的结果

-- 方案1 NOT IN+子查询
select emp_no
from employees
where emp_no not in (select emp_no from dept_manager);
​
-- 方案2  LEFT JOIN左连接 判断IS NULL
SELECT e.emp_no,d.dept_no,d.emp_no
FROM employees AS e
LEFT JOIN dept_manager AS d
ON e.emp_no=d.emp_no
WHERE dept_no IS NULL;
--测试数据
drop table if exists  `dept_manager` ; 
drop table if exists  `employees` ; 
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`));
INSERT INTO dept_manager VALUES('d001',10002,'1996-08-03','9999-01-01');
INSERT INTO dept_manager VALUES('d002',10003,'1990-08-05','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','1985-11-21');
INSERT INTO employees VALUES(10003,'1959-12-03','Parto','Bamford','M','1986-08-28');

每日更新:更多资料请关注公众号小肖学数据分析

公众号回复加油即可获取PDF版本

你可能感兴趣的:(Sql笔试,数据库,sql,mysql)