我理解为什么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 次 |
最近记录: |