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