为什么10/NULL计算为null?

h4c*_*k3d 3 sql rdbms

在SQL中,为什么10/NULL计算为NULL(或未知)?示例:

if((10/NULL) is NULL)
    DBMS_OUTPUT.PUT_LINE("Null.");
Run Code Online (Sandbox Code Playgroud)

但是,1 = NULL作为比较被认为是假的.不应该将10/NULL视为FALSE吗?

我指的只是SQL.特别是没有任何DBMS.它可能是重复但我不知道在搜索此查询时要放置哪些关键字.

a_h*_*ame 7

不应该将10/NULL视为FALSE吗?

没有为什么:

任何包含null的算术表达式始终求值为null.例如,添加到10的null为null.实际上,当给定空操作数时,所有运算符(串联除外)都返回null.

强调我的,取自Oracle手册:http://docs.oracle.com/cd/E11882_01/server.112/e26088/sql_elements005.htm#i59110

这是SQL标准所要求的.

编辑,因为问题一般是RDBMS:

SQL Server

当SET ANSI_NULLS为ON时,具有一个或两个NULL表达式的运算符返回UNKNOWN

链接到手册:

MySQL的

除非在特定函数或运算符的文档中另有说明,否则包含NULL的表达式始终会生成NULL值

链接到手册

DB2

如果任一操作数可以为null,则结果可以为null,如果其中一个为null,则结果为null值

链接到手册:

PostgreSQL的

不幸的是我在PostgreSQL手册中找不到这样一个明确的声明,虽然我确定它的行为相同.


警告:"(串联除外)"是Oracle唯一的非标准异常.(空字符串和NULL在Oracle中几乎相同).连接空值在所有其他DBMS中都为null.