SQL:从表1中选择不在表2中的记录

use*_*090 4 mysql sql select

我有两个数据库表:“员工”和“部门”。员工表有两列 Primary_key id 和 emp_name,部门表有 emp_id 和 dep_name。

应该有一个关系黑白表作为外键,但由于某种原因这种关系是虚拟的

表中的数据如

employee
id emp_name
1  'abc'
2  'efg'
4  'hij'

department
emp_id dept_name
1      'it'
2      'engineering'
3      'management'
5      'process'
Run Code Online (Sandbox Code Playgroud)

想要从部门表中选择不在员工表中的所有记录。

一种解决方案是

select d.* 
from department 
where d.id not in(select id from employee);
Run Code Online (Sandbox Code Playgroud)

有没有更好的优化方法?

Luk*_*zda 5

您可以使用LEFT JOIN

SELECT d.*
FROM department d
LEFT JOIN employee e
  ON d.emp_id = e.id
WHERE e.id IS NULL;
Run Code Online (Sandbox Code Playgroud)

您应该比较执行计划以检查哪个查询具有最佳性能。