我理解为什么null + 1或(1 + null)返回null:null意味着"未知值",如果值未知,其后继者也是未知的.对于涉及null的大多数其他操作也是如此.[*]
但是,我不明白为什么会发生以下情况:
SELECT SUM(someNotNullableIntegerField) FROM someTable WHERE 1=0
Run Code Online (Sandbox Code Playgroud)
此查询返回null.为什么?这里没有未知的值!WHERE子句返回零记录,并且一组空值的总和是0.[**]注意该集合不是未知的,它已知为空.
我知道我可以通过使用ISNULL或解决这种行为COALESCE,但我试图理解为什么这种行为对我来说是违反直觉的.
关于为什么这有意义的任何见解?
[*]有一些值得注意的例外,例如null OR true,显然true是正确的结果,因为未知值无关紧要.
[**]就像一组空值的产物一样1.从数学上来说,如果我要延长$(Z,+)$到$(Z联盟{NULL},+)$,对标识元素显而易见的选择仍然是0不null,因为x + 0 = x不过x + null = null.
ANSI-SQL-Standard将空集的SUM的结果定义为NULL.为什么他们这样做,我无法分辨,但至少行为应该在所有数据库引擎中保持一致.
参考:http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt(第126页):
b)如果指定了AVG,MAX,MIN或SUM,则
Run Code Online (Sandbox Code Playgroud)Case: i) If TXA is empty, then the result is the null value.
TXA是所选列的有效结果集.
| 归档时间: |
|
| 查看次数: |
4728 次 |
| 最近记录: |