《SQL反模式之“对未知的恐惧”》

对NULL的探讨

1、select A || B from table;

若字段A或者B有一个为null,则A||B结果为null;

2、NULL的用处(辨别悬空值):

(1)代替不确定的值

(2)代替可能没有意义的,不合适的值

(3)当传入无效参数时的返回值

(4)外查询时,未匹配列的占位符

3、对于大多数数据库,Null是一个特殊值,不同于0、false或者空字符串,但是在oracle和sybase中,Null是长度为0的空字符串。

4、null在标量表达式中的值

表达式 实际值 原因
NULL=0 NULL NULL不是0
NULL=12345 NULL 如果未指定值和所给值相等,则未知
NULL<>12345 NULL 不相等则未知
NULL+12345 NULL 未指定值和一直数座和则未知
NULL||"string" NULL Null不是空字符串,未知
NULL=NULL NULL 未指定值和另一个值相等则未知
NULL<>NULL NULL 如不同则未知

5、null在布尔表达式中的值

表达式 实际值 原因
NULL AND TRUE NULL NULL不是false
NULL AND FALSE FALSE 对于and,一假则假
NULL OR FALSE NULL null不是true
NULL OR TRUE TRUE 对于or,一真则真
NOT(NULL) NULL Null不是true,也不是flase

6、在where条件中添加is null或者is not Null会使查询放弃使用索引,增加查询时间,Null的设计初衷是作为悬空值


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。