SQL中的NULL是标记而不是值

在SQL中,经常会碰到NULL的数据,由于编程语言如C、C++、C#、JAVA等都有NULL,于是会理所当然的将两者等价,实际上两者是不等价的。在C、C++、C#、JAVA等语中,NULL其实是作为值而存在的。比如C#中创建一个对象Object,我们可以赋值为null,而此时有一点很明确就是这个数据是Object类型。但在SQL中,数据为NULL却是未知的类型,或许有人会说了数据库的列在设计的时候,我们是有设定类型的,比如NVARCHAR、VARCHAR、INT等类型,而且勾选了【允许NULL】之后,就可以存入NULL的数据,所以NULL是值。然而实际却非如此的,允许NULL只是标记说这个数据可以为NULL,而NULL实际并不是真正的值,而是NULL标记。

如果有了这样的认识,那么我们对查询数据的时候,就会很容易理解 =NULL和IS NULL的区别。

=NULL这样的SQL语句,等号表示的是对值的判断,所以必须是值才能判断,而NULL是标记,所以根本不可能判断出来。那么【=NULL】计算出来的纠结是什么值呢?是UNKNOWN。是一个不确定的值。因为是不确定的,所以将=NULL作为WHERE条件查询时,是得不到期望的结果的。

我们也可以这么理解,等号的判断是布尔类型的,正常的逻辑是只有true和false,而实际中非true即false的情况是不能覆盖所有可能的,因为还有一种是不确定的。比如前面走来一个人,正常的逻辑是这个人不是男的就是女的,但是在没有辨析确定之前,是男是女是不确定的,换句语说存在第三种状态。而=NULL就像这三种状态。同理使用>NULL、<NUL

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值