牛客SQL题解-找出所有非部门领导的员工emp_no

题目描述

有一个员工表employees简况如下:
 
有一个部门领导表dept_manager简况如下:
 
建表语句如下:
 
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 `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`)); 
请你找出所有非部门领导的员工emp_no,以上例子输出:

答案详解

方法一

先使用LEFT JOIN连接两张表,再从此表中选出dept_no值为NULL对应的emp_no记录(直接使用left Excluding JOIN)

select employees.emp_no from employees left JOIN dept_manager
on employees.emp_no=dept_manager.emp_no
where dept_no is null

方法二

使用not in 选出在employees但不在dept_manager中的emp_no记录

select emp_no from employees
where emp_no not in(
    select emp_no
    from dept_manager
)

方法三

select emp_no from employees
where not exists(
    select emp_no
    from dept_manager
    where emp_no=employees.emp_no
)
原文地址:https://www.cnblogs.com/Bluebells/p/14374627.html