首页 > 代码库 > 《SQL反模式之“对未知的恐惧”》
《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的设计初衷是作为悬空值
《SQL反模式之“对未知的恐惧”》
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。