数据库中null值与其他值的比较
2016-03-21 15:38
357 查看
数据库中存在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的字段
定长一旦表结构确定,每页存储记录数固定,不定长则不固定。
定长在update中的性能要高于不定长(个人觉得是远远高于,但是没有测试数据不敢说话)
不定长字段从较长往较短的update情况下会出现差值引起的空间的浪费;另外因为null不占空间,当null 变为非null 以及从短往长的update中都会出现整条数据位置变化,原来的位置空间被抛弃,而引起较大的空间浪费。
查找到某一个字段是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的字段
注意事项
1、null和任何值都不能比较。
2、null只能用is null 或者is not null 来判断,不能用=或者!=来判断。
3、对于varchar数据类型,无论是空字符串还是NULL值都不占用任何空间。
4、对于char类型,无论是空字符串还是NULL值会占用空间,所占用空间大小取决于建表时候指定的char数据类型的大小。
总结:定长占用空间,不定长不占用空间。是否节省空间是根据数据类型来决定的而不是是否是NULL还是空字符串,撇开数据类型来比较是没有意义的。定长一旦表结构确定,每页存储记录数固定,不定长则不固定。
定长在update中的性能要高于不定长(个人觉得是远远高于,但是没有测试数据不敢说话)
不定长字段从较长往较短的update情况下会出现差值引起的空间的浪费;另外因为null不占空间,当null 变为非null 以及从短往长的update中都会出现整条数据位置变化,原来的位置空间被抛弃,而引起较大的空间浪费。
相关文章推荐
- SQL学习
- Linux平台安装MongoDB
- Hive学习之二 《Hive的安装之自定义mysql数据库》
- MySQL参数--init-file
- 医疗数据库 Caché 开发笔记
- linux下python链接mongodb
- Memcached 简单介绍
- Sql Server的还原和导入数据效果不一样
- oracle中clob类型的使用
- mysql left( right ) join使用on 与where 筛选的差异
- oracle 数据库 查询结构拼接输出到本地文件
- mongodb group 查询
- 海量文本数据保存到数据库思路
- SQL索引优化
- mysql 定时任务使用说明
- Oracle数据库中的空值
- SQL 存储过程
- 数据库系统与文件系统的区别
- 数据库优化
- sqlite插入数据效率提升解决方案