zoukankan      html  css  js  c++  java
  • SQL关于NULL值

    NULL值容易产生的问题:

    NULL值违反人类逻辑,一个命题的要么是真的,要么是假的,在sql世界中,命题真值还有可能是未知的。这就出现在某一行对应的一个字段为NULL时。为了计算机能够在遇到未知命题能够解决,sql引入了unknown

    下面是unknown值的真值表

     

     

     正因为sql支持的是“三值逻辑”,所以在sql的世界中,排中律并不成立。

    比如有一张存有一个班级学生的姓名与年龄对照表,如果一个学生他的年龄没有在表中存储,则搜索“大于20岁的学生姓名”是有问题的。

    因为一些学生你无法通过表搜索到他的年龄。

    NULL与 NOT IN的对立

    NOT IN 中不要有 NULL值

    原因如下

    WHERE 字段名 NOT IN (值1,值2,NULL);

    等价于

    WHERE NOT 字段名 IN (值1,值2,NULL)

    等价于

    WHERE NOT (字段名=值1  OR 字段名=值2 OR 字段名=NULL)

    德*摩根定律:

    WHERE NOT(字段名=值1) AND NOT(字段名=值2) AND   NOT(字段名=NULL)

     等价于

    WHERE (字段名=值1) AND (字段名=值2) AND unknown

    结果为false或unknown

    解决方法 

    使用EXISTS,因为EXISTS只会返回TRUE或者FALSE

    类似的结局也有ALL谓词:

    因为ALL最终也被替换成了AND谓词

    聚合函数、极值函数和NULL的微妙关系:

    极值函数,除COUNT以外的聚合函数会在统计数据时把NULL排除掉。

    但当函数的输入为空集的时候,它会返回一个NULL

    最后的话:

    NULL 不是值,他只是一个缺失的标记。

  • 相关阅读:
    WinForm 窗体应用程序(初步)之一
    ADO.NET
    面向对象思想
    数据库原理
    HTML学习总结
    c# 学习心得(2)
    c# 学习心得(1)
    《大话数据结构》读书笔记(2)
    《大话数据结构》读书笔记(1)
    ASP.NET Core学习总结(3)
  • 原文地址:https://www.cnblogs.com/liuguangshou123/p/14373867.html
Copyright © 2011-2022 走看看