数据库中null值与其他值的⽐较
数据库中存在null,那么怎样查这些值是null的记录呢?
查到某⼀个字段是null的记录,最简单的想法可能是这样:
select *from  tableName where columnName = null
但是这样是不⾏的,因为null不能和任何值⽐较。在SQL中,NULL值与任何其它值的⽐较(即使是NULL)永远不会为“真”。包含NULL的表达式总是会导出NULL值,除⾮在关于操作符的⽂档中以及表达式的函数中作了其他规定。
查询为null的记录正确写法:select *from  tableName where columnName is null
null表⽰的含义是未知,即不知道有没有。和‘’空字符串不等,因为空字符串相当于没有值。null代表的是不知道有没有值。所以在数据查询中如果字段默认值是null,想查询出不等于某个条件的⼀定要加上——字段名 is null 或者字段名 is not null来包含是null或者不是null的字段注意事项
isnull的用法
1、null和任何值都不能⽐较。
2、null只能⽤is null 或者is not null 来判断,不能⽤=或者!=来判断。
3、对于varchar数据类型,⽆论是空字符串还是NULL值都不占⽤任何空间。
4、对于char类型,⽆论是空字符串还是NULL值会占⽤空间,所占⽤空间⼤⼩取决于建表时候指定的char数据类型的⼤⼩。
总结:定长占⽤空间,不定长不占⽤空间。是否节省空间是根据数据类型来决定的⽽不是是否是NULL还是空字符串,撇开数据类型来⽐较是没有意义的。
定长⼀旦表结构确定,每页存储记录数固定,不定长则不固定。
定长在update中的性能要⾼于不定长(个⼈觉得是远远⾼于,但是没有测试数据不敢说话)
不定长字段从较长往较短的update情况下会出现差值引起的空间的浪费;另外因为null不占空间,当null 变为⾮null 以及从短往长的update中都会出现整条数据位置变化,原来的位置空间被抛弃,⽽引起较⼤的空间浪费。