Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当不是在数学或其他语言中时,为什么sql中的null*0=null_Sql_Math_Null - Fatal编程技术网

当不是在数学或其他语言中时,为什么sql中的null*0=null

当不是在数学或其他语言中时,为什么sql中的null*0=null,sql,math,null,Sql,Math,Null,为什么“null*0=null” 不能有任何其他结果,为什么null*0没有计算为0? 这可能与我不熟悉的更高层次的数学有关,还是可能对dbms有一些影响?通过各种操作方式保持NULL状态是明智的设计选择。将0相乘作为例外会导致不一致,例如 0 * NULL; # 0 1 * NULL; # NULL .5 * NULL; # HALFNULL? ;-) SQL中的NULL表示“未知”。当对未知项执行数学运算时,即使将其乘以零,也不可能得到任何已知项。类似的情况也发生在数学中:尽管将任何数

为什么“
null*0=null

不能有任何其他结果,为什么
null*0
没有计算为
0

这可能与我不熟悉的更高层次的数学有关,还是可能对dbms有一些影响?

通过各种操作方式保持
NULL
状态是明智的设计选择。将0相乘作为例外会导致不一致,例如

0  * NULL; # 0
1  * NULL; # NULL
.5 * NULL; # HALFNULL? ;-)

SQL中的
NULL
表示“未知”。当对未知项执行数学运算时,即使将其乘以零,也不可能得到任何已知项。类似的情况也发生在数学中:尽管将任何数字乘以零都会得到零,但它只是ANSI标准的一部分。某些情况可以在某些系统上重写(例如,在MS SQL上比较空值)

总之,它是关于避免未定义的行为。
null*0
应该给出什么?什么类型的
null
?有太多的事情会扼杀可预测性。在编程中,
null
通常作为一个特殊值处理,出于充分的理由-
我不知道
毕竟是
No
之外的东西:)当然,Objective-C设计师不会同意我的观点D


至于这与数学有什么关系,
null
显然不是实数,所以
null*0
对于实数是未定义的。您必须有一个包含
null
的“较大”数字类别,并且必须重新定义
*
操作(或不重新定义)。当你在处理数学问题时,不要忘记约束条件——像
A*0=0
这样的规则只适用于它们的数字类别
Infinity*0
不是
0
-它是未定义的。

几乎任何使用
NULL
的操作都会导致
NULL
,除了
为NULL
非NULL
。(注意:
NULL
布尔值被视为“false”。)这就是SQL的定义方式。我认为“更高层次的数学”与此无关。我的假设是,在涉及
NULL
的操作结束时,更容易、更安全地假设它将导致
NULL
,而不是将
NULL
视为某种值。在(null传播、3值逻辑、连接null等)NB,StackOverflow处标记的描述是“null表示无任何内容或未知,具体取决于上下文。”@GordonLinoff我不认为空布尔值被视为false,是吗?我认为它们被视为
非true
,这可能被推断为false,但实际上是未知的,因此不是false或true。我承认,我实际上没有检查标准,但肯定不会将空布尔值视为false。在Objective中e-C、nil和nil与NULL有很大不同。NULL或YES=YES;它被保证为YES,0*NULL也可以保证为0,但它不在SQL中。允许
NULL
在布尔上下文中假设
false
值可能在语义上不一致,如果您愿意,但它与大多数编程语言一致。选择您的方法uble标准;-)哦,我的意思是,在SQL中,null或yes会导致yes。