SQL学习日志-3 not 、 in

今天啊苏问我一个问题:

select * from z where x=1;可以查询出结果

  select * from z where x=1 and x not in (select x from y);

select * from z where x=1 and x  in (select x from y); 

  都没有查询出结果(x是不存在于y表的),  百思不得其解。然后就为有找Google大神了

  先讲一下数据库的bool值,原来分为TRUE、FALSE和UNKNOWN,则有 not TRUE=FALSE .而 not UNKNOWN=UNKNOWN。就是说在条件语句中UNKNOWN就是FALSE

        而MSDN又说:

  使用 IN 或 NOT IN 与 test_expression 比较后返回的所有空值都将返回 UNKNOWN。将空值与 IN 或 NOT IN 一起使用会产生意外结果。

是说一个值如果不存在于列表,但列表中存在null值。则返回一个UNKNOWN值,即FALSE 。null in (null)也是UNKNOWN.这就是NOT IN 产生的意外结果

        

  


  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值