一、题目
有一个员工表employees简况如下:
有一个部门领导表dept_manager简况如下:
请你找出所有非部门领导的员工emp_no,以上例子输出:
二、解题步骤
1.NOT IN
SELECT emp_no
FROM employees
WHERE emp_no NOT IN
(SELECT emp_no
FROM dept_manager
);
in关键字适合确定数量的情况,一般效率较低,不推荐使用。能用in关键字的语句都可以转化为使用join的语句,推荐使用join关键字。
2.LEFT JOIN
SELECT e.emp_no
FROM employees e LEFT JOIN dept_manager d
ON e.emp_no=d.emp_no
WHERE d.dept_no is null;
注意:
判断是否为空,使用 is null
3.EXCEPT
SELECT emp_no
FROM employees
EXCEPT
SELECT emp_no
FROM dept_manager
但是 集合运算中,mysql只支持 union
不支持求差集(EXPECT),求交集(Intersect)
Oracle数据库支持full join,
mysql是不支持full join的,
但仍然可以同过左外连接+ union+右外连接实现