zoukankan      html  css  js  c++  java
  • 空值的处理

    概述

    • 空值是其值不知道、不确定、不存在的值
    • 数据库中有了空值,会影响许多方面,如聚集函数预算的正确性,不能参与算数、比较或逻辑运算等

    例如:

    SELECT * FROM SC
    +----------------+------------------+-----------------+
    | NAME           | COURSE           | SCORE           |
    +----------------+------------------+-----------------+
    | Tom            | Math             |             100 |
    | David          | Math             |              50 |
    | Andy           | Math             |                 |
    +----------------+------------------+-----------------+
    

    其中Andy同学的分数是空值,那么此时计算Math平均分是多少呢?

    以前,很多DBMS将空值按默认值处理,比如数字被处理成0,引发计算错误。

    在现行SQL标准和流行DBMS中,空值被用一种特殊的符号Null来标记。

    判断空值

    空值检测 is [not] null

    SELECT * FROM sc WHERE score is null
    +----------------+------------------+-----------------+
    | NAME           | COURSE           | SCORE           |
    +----------------+------------------+-----------------+
    | Andy           | Math             |                 |
    +----------------+------------------+-----------------+
    

    注:不能写成 score=null,空值是不能进行运算的

    现行DBMS空值处理小结

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

    示例1

    SELECT AVG(score) FROM SC
    +----------------------+
    | AVG(score)           |
    +----------------------+
    | 75.0000              |
    +----------------------+
    

    这里,Andy的分数被聚集函数AVG忽略

    示例2

    SELECT COUNT(*) FROM SC
    +--------------------+
    | COUNT(*)           |
    +--------------------+
    | 3                  |
    +--------------------+
    
    SELECT COUNT(SCORE) FROM SC
    +------------------------+
    | COUNT(SCORE)           |
    +------------------------+
    | 2                      |
    +------------------------+
    

    可以看到,除了COUNT(*)之外即使是COUNT(score)也忽略了null

  • 相关阅读:
    MQ消息堆积处理
    mysql覆盖索引与回表
    MYSQL-间隙锁详解
    MySQL InnoDB(Spring)并发事务导致的死锁及解决方案
    new String()创建了几个对象
    公平锁和非公平锁
    一个java对象最小占用内存空间
    千万级甚至亿级数据量排序
    @media (prefers-reduced-motion)
    babel 编译后导致_typeof无限递归调用 Maximum call stack size exceeded
  • 原文地址:https://www.cnblogs.com/velscode/p/10576289.html
Copyright © 2011-2022 走看看