Sql对两个集合做差,使用not exists

it2026-04-09  3

查询a表中b表没有的数据,使用not exists,mysql对两个表的查询结果做差

1.假设有两个表,dept(id,dname)表,emp(id,did,salary)表

dept表

iddname1采购部2财务部3业务部

emp表

iddidsalary115000215500325500424500525000

查询在dept表中有的id在emp表中没有对应的did的dept表信息,大概意思就是查询部门人数为0的情况,最后显示的结果如下:

iddname3业务部

代码如下:

select id,dname from dept d where not exists( select did from emp where d.id=did )

其实碰到这种情况很多人都会选择用not in,先查询所有的emp表的did,去重,然后用dept的id去not in一下结果,上代码。

select id,dname from dept d where id not in( select distinct did from emp )

这样也是可以的,但是还是推荐使用not exists,具体原因自己百度查询,sql的优化,看看not exists和not in用法的区别。

总结

我们发现,其实这就是对着两个表的查询结果做差,类似于集合的差集。左表dept我们可以看成连接条件id的集合{1,2,3},右表emp我们看成连接条件did的集合{1,2}做差后就剩{3}了,与我们预期的结果保持一致。

欢迎大家指出我的错误,欢迎大家一起讨论技术。

做没做好都点个赞呗!

最新回复(0)