• 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 不是值,他只是一个缺失的标记。

  • 相关阅读:
    php 修改、增加xml结点属性的实现代码
    mysql rand随机查询记录效率
    分享:mysql 随机查询数据
    分享:perl 文件操作总结
    分享:Perl打开与读取文件的方法
    js日期相关函数总结分享
    php后台如何避免用户直接进入方法实例
    python 函数的进阶
    python 初识函数
    python 冒泡排序
  • 原文地址:https://www.cnblogs.com/liuguangshou123/p/14373867.html
Copyright © 2020-2023  润新知