oracle中in包含空,Oracle的条件in中包含NULL时的处理
我们在写SQL时经常会⽤到in条件,如果in包含的值都是⾮NULL值,那么没有特殊的,但是如果in中的值包含null值(⽐如in后⾯跟⼀个⼦查询,⼦查询返回的结果有NULL值),Oracle⼜会怎么处理呢?
创建⼀个测试表t_in
linuxidc@linuxidc>create table t_in(id number);
linuxidc@linuxidc>select * from t_in;
ID
----------
1
2
3
4
现在t_in表中有5条记录
1、in条件中不包含NULL的情况
linuxidc@linuxidc>select * from t_in where id in (1,3);
ID
----------
1
3
2 rows selected.
上⾯的条件等价于id =1 or id = 3得到的结果正好是2;查看执⾏计划中可以看到 2 - filter("ID"=1 OR "ID"=3)说明我们前⾯的猜测是正确的
2、in条件包含NULL的情况
unknown怎么处理linuxidc@linuxidc>select * from t_in where id in (1,3,null);
ID
----------
1
3
2 rows selected.
上⾯的条件等价于id = 1 or id = 3 or id = null,我们来看下图当有id = null条件时Oracle如何处理
从上图可以看出当不管id值为NULL值或⾮NULL值,id = NULL的结果都是UNKNOWN,也相当于FALSE。所以上⾯的查结果只查出了1和3两条记录。
查看执⾏计划看到优化器对IN的改写
3、not in条件中不包含NULL值的情况
linuxidc@linuxidc>select * from t_in where id not in (1,3);
ID
----------
2
4
2 rows selected.
上⾯查询的where条件等价于id != 1 and id !=3,另外t_in表中有⼀⾏为null,它虽然满⾜!=1和!=3但根
据上⾯的规则,NULL与其他值做=或!=⽐较结果都是UNKNOWN,所以也只查出了2和4。
从执⾏计划中看到优化器对IN的改写
4、not in条件中包含NULL值的情况
linuxidc@linuxidc>select * from t_in where id not in (1,3,null);
no rows selected
上⾯查询的where条件等价于id!=1 and id!=3 and id!=null,根据上⾯的规则,NULL与其他值做=或!=⽐较结果都是UNKNOWN,所以整个条件就相当于FALSE的,最终没有查出数据。
从执⾏计划中查看优化器对IN的改写
总结⼀下,使⽤in做条件时时始终查不到⽬标列包含NULL值的⾏,如果not in条件中包含null值,则不会返回任何结果,包含in中含有⼦查询。所以在实际的⼯作中⼀定要注意not in⾥包含的⼦查询是否包含null值。
linuxidc@linuxidc>select * from t_in where id not in (select id from t_in where id = 1 or id is null);
no rows selected
Oracle的条件in包含NULL时的处理
⼀.创建⼀个含表,表中只有⼀列为id,该列中含有值为NULL的记录 我们在写SQL时经常会⽤到in条件,如果in包含的值都是⾮NULL值,那么没有特殊的,但是如果in中的值包含null值(⽐如in后⾯ ...
Oracle 在not in中使⽤null的问题
MySQL中处理Null时要注意两⼤陷阱
MySQL数据库是⼀个基于结构化数据的开源数据库.SQL语句是MySQL数据库中核⼼语⾔.不过在MySQL数据库中执⾏SQL语句,需要⼩⼼两个陷阱. 陷阱⼀:空值不⼀定为空 空值是⼀个⽐较特殊的字段. ...
C#程序读取数据库中包含null的列的值
private void btn2_Click(object sender, RoutedEventArgs e) { using (SqlConnection ...
Java规则之条件语句中做空判断时使⽤||和&;&;常犯的错误
错误代码⽰例: public String bar(String string) { //error 1 if (string!=null || !string.equals("" ...
oracle中查询条件包含null时
不能使⽤=null或者!=null 应该使⽤is null和is not null
js传递参数中包含+号时的处理⽅法
encodeURI(url).replace(/\+/g, '%2B') 例⼦: $Anesthesiawaystatistical = function (annual, an
es ...
asp mvc中包含webapi时,token失效产⽣302的解决⽅案
public void ConfigureAuth(IAppBuilder app) { app.UseCookieAuthentication(new CookieAuthenticationOpt ...
随机推荐
Adb connection Error:远程主机强迫关闭了⼀个现有的连接
在⽤⼿机调试程序时,有时会出现“Adb connection Error:远程主机强迫关闭了⼀个现有的连接”的错误. 出现这种错误时,可以按照以下步骤解决: (1)运⾏,并将⽬录CD到\ ...
《C++primer》v5 第3章 字符串、向量和数组 读书笔记 习题答案
本章问题 1.char *p="hello world";与char p[]="hello world"的问题. 简单说前者是⼀个指向字符串常量的指针,后者是⼀ ...
svn认证失败时的解决
删除⽤户⽬录下的.subversion⽂件夹,这个⽂件夹记录了密码! rm .subversion/ -rf
javascript-设置div隐藏
html code:
...
a标签增加onclick事件提⽰未定义function
项⽬使⽤的是ext框架,版本是ext4.2 出现的问题代码如下: renderer : function(value){ var html = "
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论