查询a表中b表没有的数据,使用not exists,mysql对两个表的查询结果做差
1.假设有两个表,dept(id,dname)表,emp(id,did,salary)表
dept表
iddname
1采购部2财务部3业务部
emp表
iddidsalary
115000215500325500424500525000
查询在dept表中有的id在emp表中没有对应的did的dept表信息,大概意思就是查询部门人数为0的情况,最后显示的结果如下:
iddname
3业务部
代码如下:
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}了,与我们预期的结果保持一致。
欢迎大家指出我的错误,欢迎大家一起讨论技术。
做没做好都点个赞呗!