Oracle SQL NULL 值对 IN/NOT IN语句的影响
2009-10-14 22:17
531 查看
今天,有一个sql NOT IN语句,匹配条件里有一个null,结果什么都查不出来,同事觉得很难理解。其实只要明白一点就可以了,IN语句匹配的时候是用=,NOT IN匹配的时会用<>,就很容易理解了。
首先我们要知道,null在oracle是个特殊的东西,没有任何可比性,如果使用 =/<> 对比null,得到的始终是false。null 值只能用 is null/is not null来进行对比。
已知表table:
type value
SC 1
PO 4
BO 9
select * from table where type IN('SC',null);
这句话就相当于:select * from table where type='SC' or type=null;
因为已经有 type='SC'匹配,而type=null没有可比性,可以认为被忽略了,所以在 IN 语句里的 null 可以认为没有意义。
select * from table where type NOT IN('SC',null);
这句话就相当于:select * from table where type!='SC' and type!=null;
因为 type!=null 返回的始终是false,整个查询语句不会匹配任何一条记录,所以NOT IN语句里的null会使查询没有任何结果。
首先我们要知道,null在oracle是个特殊的东西,没有任何可比性,如果使用 =/<> 对比null,得到的始终是false。null 值只能用 is null/is not null来进行对比。
已知表table:
type value
SC 1
PO 4
BO 9
select * from table where type IN('SC',null);
这句话就相当于:select * from table where type='SC' or type=null;
因为已经有 type='SC'匹配,而type=null没有可比性,可以认为被忽略了,所以在 IN 语句里的 null 可以认为没有意义。
select * from table where type NOT IN('SC',null);
这句话就相当于:select * from table where type!='SC' and type!=null;
因为 type!=null 返回的始终是false,整个查询语句不会匹配任何一条记录,所以NOT IN语句里的null会使查询没有任何结果。
相关文章推荐
- Oracle sql"NOT IN"语句优化,查询A表有、B表没有的数据
- Oracle sql"NOT IN"语句优化,查询A表有、B表没有的数据
- oracle SQL not in null,单列,复合列
- 转Asktom:Oracle中怎么处理in的动态SQL语句.
- Oracle not in查不到应有的结果(NULL、IN、EXISTS详解)
- Mybatis中sql语句中的in查询,一定要判断null的情况
- 转://Oracle not in查不到应有的结果(NULL、IN、EXISTS详解)
- oracle sql 语句 in 与EXIST用法比较
- SQL语句中in not in exits not exits用法比较
- 理解NULL如何影响IN和EXITS语句
- 理解NULL如何影响IN和EXITS语句
- EXPLANIN PLAN 的输出显示ORACLE如何执行SQL语句
- SQL NOT IN constraint and NULL values
- ORACLE-SQL:排序防止NULL影响排序结果的处理方法
- SQL CREATE TABLE 语句\SQL 约束 (Constraints)\SQL NOT NULL 约束\SQL UNIQUE 约束
- Mybatis中sql语句中的in查询,一定要判断null的情况
- oracle mysql sql serve where in 语句的不同
- NULL对IN的查询的影响及解决示例.sql
- 理解null如何影响in和exits语句
- 小心 SQL NOT IN 子查询的结果含有 null 值时的陷阱!