关于数据库NULL值的几个问题思考
2017-02-15 13:02
417 查看
最近在写项目,拼接SQL时,发现好多关于NULL值的问题,现在把这些问题整理出来,以供日后参考。
对于Oracle数据库:
一、排序
Oracle对于null值的排序,有一个函数可以进行操作: 在默认情况下,Oracle将null值定义为最大值,所以在排序时,null值总是位于最前(DESC)或最后(ASC);
好在Oracle提供了一个可以自定义的null,使用nulls first或者nulls last,用户可以对null值的排序位置进行调控,且此函数不受DESC或ASC的影响;
二、条件查询
在使用动态SQL进行条件查询时,如果一个列中包含有null值的话,当使用=或者!=等操作符进行筛选时,null是不包含在筛选结果中的。
select * from table where state != 1
这句SQL查询的结果中,是不包含state=null的情况的。
而且,在对state为null的查询,是不能使用state=null来查的,必须使用state is null来查询。
三、函数IN和NOT IN的情况
这两个函数对于null值都不感冒,但是处理的方式有点区别:
1、对于IN函数,当条件集中包含NULL时,函数只对非NULL值进行匹配,对于NULL值是视而不见的,所以查询结果并不是预期结果;
SELECT * FROM test WHERE type IN ('2', NULL );
2、对于NOT IN函数,当条件集中包含NULL时,查询结果必为空集,没有任何匹配出现;
SELECT * FROM test WHERE type NOT IN ('2', NULL );
对于Oracle数据库:
一、排序
Oracle对于null值的排序,有一个函数可以进行操作: 在默认情况下,Oracle将null值定义为最大值,所以在排序时,null值总是位于最前(DESC)或最后(ASC);
好在Oracle提供了一个可以自定义的null,使用nulls first或者nulls last,用户可以对null值的排序位置进行调控,且此函数不受DESC或ASC的影响;
二、条件查询
在使用动态SQL进行条件查询时,如果一个列中包含有null值的话,当使用=或者!=等操作符进行筛选时,null是不包含在筛选结果中的。
select * from table where state != 1
这句SQL查询的结果中,是不包含state=null的情况的。
而且,在对state为null的查询,是不能使用state=null来查的,必须使用state is null来查询。
三、函数IN和NOT IN的情况
这两个函数对于null值都不感冒,但是处理的方式有点区别:
1、对于IN函数,当条件集中包含NULL时,函数只对非NULL值进行匹配,对于NULL值是视而不见的,所以查询结果并不是预期结果;
SELECT * FROM test WHERE type IN ('2', NULL );
2、对于NOT IN函数,当条件集中包含NULL时,查询结果必为空集,没有任何匹配出现;
SELECT * FROM test WHERE type NOT IN ('2', NULL );
相关文章推荐
- 小结几个小问题,关于数据库乱码,dialog
- [总结]关于数据库安装中的几个问题
- 关于设计数据库几个思考
- 【原】关于IPcamera几个问题的思考
- 思考:关于搜索引擎抓取网页的几个技术问题
- 关于数据库自增主键的几个问题
- GIS开发随笔(2)——关于建立GIS数据库的几个问题
- 关于ORACLE通过file_id与block_id定位数据库对象遇到的问题的一点思考
- 极速快三平台出租关于数据库自增主键的几个问题
- 由一个问题引发的思考——关于数据库的外键约束
- 关于数据库字段长度字节(byte)和(bit)的几个概念问题!
- 关于ORACLE通过file_id与block_id定位数据库对象遇到的问题引发的思考
- 关于数据库设计中主键问题的思考
- 关于数据库设计中主键问题的思考
- 关于微软面试题:"四人过桥"问题的思考——“n人过桥”问题的演进(Java实现)
- Stack Overflow上关于Java Collections的几个常见问题
- 关于MFC程序中CString转char*与char*转CString的几个问题
- 关于数据库优化问题收集
- 有关数据库 行 锁 的几个问题(rowlock) 行锁的基本说明: SELECT au_lname FROM authors WITH (NOLOCK) 锁定提示 2015-04-03 09:41 0
- MSIL系列:关于Boxing和堆栈,栈的几个问题的回答