题目描述
有一个员工表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 )