欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

空值的处理

程序员文章站 2024-03-16 09:18:40
...

概述

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

例如:

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