最常见的SQL查询性能改善实践---用outer join 代替 not in

一公司中的同一员工可以属于多个不同部门,如何列出还没有分配部门的员工??

员工表:create table emp(id int primary key, name varchar(100))
部门表:create table depart(id int primary key, name varchar(10))
关系表:create table emp_depart(eid int,did int)

注释:eid 是员工表emp的外键, did 是部门表depart的外键

常见查询是(性能不好):

select * from emp where id not in (select eid from emp_depart)

性能好的查询用outer join:

select emp.* from emp left join emp_depart on emp.id=emp_depart.eid where emp_depart.eid is null

你可能感兴趣的:(sql)