zoukankan      html  css  js  c++  java
  • SQL中的NULL值


    除is [not] null之外,空值不满足任何查找条件。
    –如果null参与算术运算,则该算术表达式的值为null。
    –如果null参与比较运算,则结果可视为false。在SQL-92中可看成unknown。
    –如果null参与聚集运算,则除count(*)之外其它聚集函数都忽略null。
       例:select    sum(SAL)
               from     PROF
       例:select    count(*)
               from     PROF


    详细分析

    SQL中的NULL值,表示不知道(UNKNOWN)的数据,用作不知道数据的具体值,或者不知道数据是否存在,或者数据不存在等情况。

    因为引入了NULL值,故此SQL的逻辑系统是三值逻辑系统——FALSE、TRUE、NULL三种值构成的逻辑系统。
    1、OR、AND、NOT真值表
    A     B     A OR B     A AND B     NOT A
    FALSE     FALSE     FALSE     FALSE     TRUE
    FALSE     TRUE     TRUE     FALSE     -
    FALSE     NULL     NULL     FALSE     -
    TRUE     FALSE     TRUE     FALSE     FALSE
    TRUE     TRUE     TRUE     TRUE     -
    TRUE     NULL     TRUE     NULL     -
    NULL     FALSE     NULL     FALSE     NULL
    NULL     TRUE     TRUE     NULL     -
    NULL     NULL     NULL     NULL     -


    因为NULL当UNKNOWN来理解,因此,当值为NULL时,它既有可能是FALSE也有可能是TRUE。如果计算结果只有一种可能,则取该种可

    能;如果计算结果既有可能是FALSE,也有可能是TRUE,那么结果便为NULL。例如,NOT NULL,其结果也有两种可能,因此NOT NULL

    的结果是NULL。再例如,NULL AND TRUE,则其结果也有两种可能,因此NULL AND TRUE的结果是NULL。但是,NULL OR TRUE,或是

    NULL AND FALSE,前者结果为TRUE,单是一个TRUE出现,便足以知道结果为TRUE;后者结果为FALSE,单是一个FALSE出现,便足以

    知道结果为FALSE。这是OR和AND的特性决定的。
    2、比较运算符及算术运算符中的NULL
      比较运算符及算术运算符中的NULL,会导致运算结果也为NULL。如3+NULL的结果为NULL,NULL>=5的结果为NULL,等等。
    3、BETWEEN AND、IN中的NULL
      A BETWEEN B AND C意为A>=B AND A<=C,因此其产生NULL值的情况,可以参照后者判断。A NOT BETWEEN B AND C相应等价于

    NOT(A>=B AND A<=C)。
      A IN(B,C,D)意为A=B OR A=C OR A=D,因此其产生NULL值的情况,可以参照后者判断。A NOT IN(B,C,D)相应等价于NOT(A=B OR

    A=C OR A=D)。当集合为空时,IN的结果为FALSE,NOT IN的结果则为TRUE。
    4、EXISTS、IS NULL
      EXISTS(以及NOT EXISTS)、IS NULL(以及IS NOT NULL),均只产生FALSE或TRUE,而不产生NULL。
    5、ANY、ALL
      在一个值与一个集合(一组值)比较时,比较运算符可以加上ANY(或SOME,作用相同)或ALL。
      A>ANY(B,C,D)意为A>B OR A>C OR A>D,因此其产生NULL值的情况,可以参照后者判断。当集合为空时,ANY的结果为FALSE。
      A>ALL(B,C,D)意为A>B AND A>C AND A>D,因此其产生NULL值的情况,可以参照后者判断。当集合为空时,ALL的结果为TRUE。
    6、WHERE、HAVING、ON条件筛选,与完整性约束检查
      在WHERE、HAVING、ON条件筛选中,只保留结果为TRUE的,而不处理FALSE及NULL的。但在完整性约束检查中,只有结果为FALSE

    的,才违反约束检查,NULL并不违反。

     

    和NULL值相关的两个函数

    NULLIF:需要两个参数

    例子:NULLIF(a,b)
    说明:如果a和b是相等的,那么返回NULL,如果不相等返回a
    select NULLIF('eqeqweqwe','1') 结果是eqeqweqwe
    select NULLIF(1,1) 结果是NULL
    a和b的类型要一致


    ISNULL:需要两个参数

    例子:ISNULL(a,b)
    说明:如果a和b同时为NULL,返回NULL,如果a为NULL,b不为NULL,返回b,如果a不为NULL,b为NULL返回a,如果a和b都不为NULL

    返回a
    select ISNULL(null,null)结果是null
    select ISNULL(null,33)结果是33
    select ISNULL('ddd',null)结果是ddd
    select ISNULL(44,33)结果是44

    转载自:http://blog.sina.com.cn/s/blog_6a6eb42d0100ka56.html

  • 相关阅读:
    大数据分析项目中的“最差”实践
    【Python】Python正则表达式使用指导
    大数据分析的5个方面
    你真的会python嘛?
    你是如何自学 Python 的?
    python中#!/usr/bin/python与#!/usr/bin/env python的区别
    [实验吧刷题]密码学部分
    [bugku]高阶web 综合帖
    [bugku]sqlmap部分
    【ctf第一次校赛】+不会的web/ +凉凉的省赛预赛 + 最后摸了 个二等。。
  • 原文地址:https://www.cnblogs.com/lvxiangjack/p/5466358.html
Copyright © 2011-2022 走看看