从一个表中查找另一表没有的记录

[quote]
如果要从一个表中查询另一个表不存在的记录,这样的情况从不同数据的角度去分析,有些数据库提供了差集的函数,有些没有要写子查询。

1、DB2、postgreSQL差集函数except
select deptno from emp
except
select deptno from dept

2、Oracle的差集函数minus
select deptno from emp
minus
select deptno from dept

3、Mysql和sqlserver不支持差集函数,使用子查询
select deptno from dept where deptno not in (select deptno from emp)

但是使用not in的时候一定要注意null值的问题,in 和not in操作里面相当于or操作。
如果
select deptno from dept where deptno not in (10,20,null)
这样等效于
select deptno from dept where deptno not (deptno =10 or deptno = 20 or deptno =null)

not (deptno =10 or deptno = 20 or deptno =null) = (false or false or null)=(false or null)

在SQL中,TRUE or null的结果是true,而false or null的结果是null,所以在使用in谓词和or计算时,值可能是null的情况,这一点要记住。
要解决这样问题,可以使用not Exists和相关子查询
select deptno from dept d where not exists(select 'xx' from emp e where e.deptno = d.deptno)


[/quote]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值