例如:
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
,空值是不能进行运算的
is [not] null
外,空值不满足任何查找条件null
参与算术运算,则该算术表达式的值为null
null
参与比较运算,则结果可视为false
。在SQL-92中可看成unknownnull
参与聚集运算,则除count(*)
之外其他聚集函数都忽略null
SELECT AVG(score) FROM SC
+----------------------+
| AVG(score) |
+----------------------+
| 75.0000 |
+----------------------+
这里,Andy的分数被聚集函数AVG
忽略
SELECT COUNT(*) FROM SC
+--------------------+
| COUNT(*) |
+--------------------+
| 3 |
+--------------------+
SELECT COUNT(SCORE) FROM SC
+------------------------+
| COUNT(SCORE) |
+------------------------+
| 2 |
+------------------------+
可以看到,除了COUNT(*)
之外即使是COUNT(score)
也忽略了null
原文:https://www.cnblogs.com/velscode/p/10576289.html