Oracle“不等于号”与Null的情况
2014-08-19 14:11
441 查看
今天突然才发现,Oracle中的“不等于操作符”是忽略Null的。
比如,查询comm不等于的300的记录,我会理所当然地使用where comm != 300
预想会返回包含Null的不等于300的记录(意识里认为Null也是“不等于30”的其中一种情况)。
而实际上,它只返回不为Null且不等于300的记录,见如下测试。
使用SCOTT的公共数据测试:
TEST
只返回comm不为null并且不等于300的记录。
事实上,并不仅仅“不等于号”与Null的关系是如此的,其他操作符也类似,只不过“不等于号”使用场景的特殊性让我们容易发觉此特性。
其中原因在于Null,关于Null的各种情况说明可见以下Oracle的文档:
http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements005.htm
PS,见“寓言因永吟”回复。亦可使用LNNVL方法以解决此问题,具体Oracle文档描述如下:
http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions091.htm
比如,查询comm不等于的300的记录,我会理所当然地使用where comm != 300
预想会返回包含Null的不等于300的记录(意识里认为Null也是“不等于30”的其中一种情况)。
而实际上,它只返回不为Null且不等于300的记录,见如下测试。
使用SCOTT的公共数据测试:
--All data select * from scott.emp t; --Not equal 300(Not contain null) select * from scott.emp t where t.comm != 300; --Not equal 300(Does contain null) select * from scott.emp t where t.comm != 300 or t.comm is null;
TEST
只返回comm不为null并且不等于300的记录。
事实上,并不仅仅“不等于号”与Null的关系是如此的,其他操作符也类似,只不过“不等于号”使用场景的特殊性让我们容易发觉此特性。
其中原因在于Null,关于Null的各种情况说明可见以下Oracle的文档:
http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements005.htm
PS,见“寓言因永吟”回复。亦可使用LNNVL方法以解决此问题,具体Oracle文档描述如下:
http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions091.htm
相关文章推荐
- Oracle 不等于判断,防止字段内容为NULL时报错的情况
- Oracle“不等于号”与Nulls的情况(转)
- Oracle关于varchar2型中"(空字符串)是否等于NULL问题
- oracle 中 不等于 和 null
- Sql Server,Oracle 排序order by 数据有null的情况
- 在极高负荷情况下oracle redolog的配置建议
- 关于oracle中的去除null和空格的问题
- Oracle中提取sysdate函数值和系统日期不同的情况处理
- oracle与sql server中NULL的识别方式的异同
- Hibernate对oracle的分页支持情况。OracleDialect和Oracle9Dialect的一个性能差别。
- 展示JDBC存取ORACLE大型数据对象LOB几种情况的示范类
- Oracle求求空间使用情况
- Hibernate中Oracle保存出现没有反应的情况
- Oracle 8x监控sysdba角色用户登陆情况
- 展示JDBC存取ORACLE大型数据对象LOB几种情况的示范类
- NULL SQL Server Oracle
- Oracle中null的使用详解
- Oracle 查询表空间使用情况SQL
- oracle傻瓜手册--分析session中SQL执行情况
- 登陆到域的情况下连接Oracle数据库