以前还专门小总结过一下Oracle中关于NULL的一些问题,碰巧今天在看书的过程中又看到了另外一个以前没发现的需要注意的地方,那就是在not in中使用null的问题。

SQL> select * from dept;

DEPTNO DNAME          LOC

---------- -------------- -------------

10 ACCOUNTING     NEW YORK

20 RESEARCH       DALLAS

30 SALES          CHICAGO

40 OPERATIONS     BOSTON

SQL> select deptno

2  from dept

3  where deptno in (10,50,null);

DEPTNO

----------

10

//看到使用in的时候即便有null 也是正常的 下面看一下not in

SQL> select deptno

2  from dept

3  where deptno not in (10,50);

DEPTNO

----------

20

30

40

//这里看起来和我们的预期挺符合的哦

SQL> select deptno

2  from dept

3  where deptno not in (10,50,null);

no rows selected

//怎么回事 为什么加了个null 前面的20、30、40三条数据就不显示出来了

IN和NOT IN本质上都是OR运算,因而计算逻辑OR时处理NULL的方式不同,产生的结果也不同。

下面我们分析一下前面的三条语句

SQL> select deptno

2  from dept

3  where deptno in (10,50,null);

这里可以等价于where deptno=10 or deptno=50 or deptno=null,由于是or相连接,那么只要有一个条件为TRUE,整个就喂TRUE了。所以deptno为10的记录显示出来了。

SQL> select deptno

2  from dept

3  where deptno not in (10,50,null);

这里等价于where not (deptno=10 or deptno=50 or deptno=null),拿deptno=20的记录来举例吧。

not (20=10 or 20=50 or 20=null)

not(false or false or null)

not null

null

(以前只知道在where条件返回false的时候不成立,现在看来返回NULL的时候也不成立呀,下面是做的一个小实验可以证明这个猜想)

#####################

SQL> select * from dept

2  where 1=null;

no rows selected

#####################

SQL> select deptno

2  from dept

3  where deptno not in (10,50);

这里等价于where not (deptno=10 or deptno=50),依然拿deptno=20来举例。

not (20=10 or 20=50 )

not(false or false)

not false

true

注意:FALSE OR NULL=NULL ,而TRUE OR NULL=TRUE。

oracle设置no null,Oracle 在not in中使用null的问题相关推荐

  1. Oracle 设置 sort au,oracle数据库拼音排序及NLS_SORT配备[转]

    oracle数据库拼音排序及NLS_SORT配置[转] Oracle9i之前,中文是按照二进制编码进行排序的.在oracle9i中新增了按照拼音.部首.笔画排序功能. 1.设置NLS_SORT参数值 ...

  2. oracle 设置忽略关键字,Oracle中Hint被忽略的几种常见情形

    Hint可以影响优化器对于执行计划的选择,但这种影响不是强制性的,优化器在某些情况下可能会忽略目标SQL中的Hint.由于各种原因导致Hint被Oracle忽略后,Oracle并不会给出任何提示或者警 ...

  3. java null是什么类型_Java中的Null到底是什么

    对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认 ...

  4. oracle设置导出权限,Oracle 创建 删除 用户 导出 导入 分配权限

    //创建临时表空间 create temporary tablespace ezit_temp tempfile 'C:/Oracle/lenovo/oradata/orcl/ezit_temp01. ...

  5. oracle设置打印机,使用 Oracle Solaris 打印管理器设置网络连接的打印机

    使用 Oracle Solaris 打印管理器设置网络连接的打印机 使用 Oracle Solaris 打印管理器设置网络连接的打印机的方法与设置直接连接的打印机类似.但是需要设置的打印机定义有所不同 ...

  6. oracle 设置 shmmax,安装ORACLE时在Linux上设置内核参数的含义

    前两天看到一篇Redhat官方的Oracle安装文档,对于Linux内核参数的修改描述的非常清晰. 安装Oracle之前,除了检查操作系统的硬件和软件是否满足安装需要之外,一个重点就是修改内核参数,其 ...

  7. oracle 设置 sga_max_size参数,Oracle教程之SGA_MAX_SIZE参数

    SGA_MAX_SIZE SGA_MAX_SIZE这个参数顾名思义,它用来控制SGA 使用虚拟内存 的最大大小,这里的虚拟内存的含义可能会有所模糊,先可以这样理解,就是Oracle 所能在内存中给SG ...

  8. oracle设置临时表空间,Oracle临时表空间查看、添加临时表空间数据文件、修改默认临时表空间 方法!...

    --查表空间使用率情况(含临时表空间) SELECT d.tablespace_name "Name", d.status "Status", TO_CHAR ...

  9. oracle设置标识列,Oracle中为表设置自动增长的标识列

    -- 创建序列 create sequence 序列名称 start with 1 -- 起始值 increment by 1 -- 增量 maxvalue 99999999 -- 最大值 nocyc ...

  10. java static null,我们可以在Java中使用null对象调用静态方法吗?如果是这样,怎么样?...

    Since static methods can be called directly from the class (i.e. ClassName.methodName), why it is re ...

最新文章

  1. Linux中link,unlink,close,fclose详解
  2. Daily Scrum M2 11-14
  3. tableau可视化函数使用案例(六十七)-如何用Tableau获取数据并对数据进行操作?
  4. 为什么CRM WebClient UI每次点了回车都会触发到后台的roundtrip
  5. Vue 媒体处理(摄像头,截图,播放本地视频)
  6. java基础之多线程笔记
  7. js实时获取窗口大小变化
  8. lduan server 2012 ***管理 上(三十九)
  9. 中兴上网卡 linux,电信3G无线上网卡中兴AC2726在Ubuntu 10.10安装使用成功
  10. HDFS副本放置策略
  11. 现实迷途 第八章 不轨企图
  12. python urllib3 使用_使用Python URLLIB3下载文件
  13. ckplayer默认html,ckplayer.html
  14. Web指纹识别器系列1:开源项目搜集和反思
  15. MT6735A和MT6753 前摄无法点亮
  16. 【十二】Python全栈之路--推导式_生成器
  17. Google Colaboratory中有多个py文件时的使用技巧
  18. 本科计算机与科学毕业论文,计算机科学与技术专业本科生毕业论文
  19. 运营小红书账号的经验有哪些?这几个方面值得借鉴!
  20. 上海市企业技术中心认定及奖励政策解读

热门文章

  1. Docker学习总结(39)——简析容器、无服务器和虚拟机的安全性差异
  2. Linux学习总结(8)——VMware v12.1.1 专业版以及永久密钥
  3. aliyun gradle 代理_android studio gradle国内代理设置
  4. python用http协议传数据_《Python网络爬虫》1.3 HTTP协议基础知识
  5. 双鸭山2021年高考成绩查询,黑龙江双鸭山2021年上半年教师资格证成绩查询时间...
  6. 软件测试---弹出窗口
  7. 接入Google Play SDK
  8. OSChina 周日乱弹 —— 致 OSCer 的中秋祝福
  9. CentOS6离线bash漏洞—再修复方法
  10. PLSQL_案例优化系列_明白索引是如何让SQL运行飞快(案例5)