oracle空值参与运算结果就为空
2012-02-19 10:49
225 查看
昨天在做一道题目时,发现了一个问题,就是空值的问题。
问题是在oracle自带的emp表的。
emp表有其中的 empno 编号,ename 姓名 mgr 上级编号 三列。
题目要求是这样的:
查询不直接领导同事的员工的信息(即有上司无下属)
我写的答案是select empno,ename from emp where empno not in(select mgr from emp );
本来觉得能得到结果的,可怎么查询也不出结果。我纳闷了,后来我新建了一个表,插了几行测试数据,发现能查到结果。但一到emp表就不出结果。
我准备把emp表的一行行数据插进来,然后每插一行做一次测试,所以能得到结果。就在这时,我看到了一个特殊的数据 mgr有一个数据为null ,眼前突然一亮,是不是它搞的鬼呢,我把它改成1234 然后查询,结果出来了。看来还是null的问题,问了同学,同学告诉我说,null值参与运算结果就会为空的。
我做了一次测试 select * from emp where empno not in(null) 结果查不到数据,看来是真的。发现好像null值只能用于 is null或者 is not null 用其它的运算符比如<> =都会使结果为空。OK,学了一个知识点。
更改语句 select empno,ename,sal,mgr from emp where mgr is not null and empno not in (select mgr from emp where mgr is not null) 结果出来了。
此题还有另一种解法:select ename,sal,mgr from emp where empno not in(select e1.empno from emp e1,emp e2 where e1.empno=e2.mgr) 也可以
问题是在oracle自带的emp表的。
emp表有其中的 empno 编号,ename 姓名 mgr 上级编号 三列。
题目要求是这样的:
查询不直接领导同事的员工的信息(即有上司无下属)
我写的答案是select empno,ename from emp where empno not in(select mgr from emp );
本来觉得能得到结果的,可怎么查询也不出结果。我纳闷了,后来我新建了一个表,插了几行测试数据,发现能查到结果。但一到emp表就不出结果。
我准备把emp表的一行行数据插进来,然后每插一行做一次测试,所以能得到结果。就在这时,我看到了一个特殊的数据 mgr有一个数据为null ,眼前突然一亮,是不是它搞的鬼呢,我把它改成1234 然后查询,结果出来了。看来还是null的问题,问了同学,同学告诉我说,null值参与运算结果就会为空的。
我做了一次测试 select * from emp where empno not in(null) 结果查不到数据,看来是真的。发现好像null值只能用于 is null或者 is not null 用其它的运算符比如<> =都会使结果为空。OK,学了一个知识点。
更改语句 select empno,ename,sal,mgr from emp where mgr is not null and empno not in (select mgr from emp where mgr is not null) 结果出来了。
此题还有另一种解法:select ename,sal,mgr from emp where empno not in(select e1.empno from emp e1,emp e2 where e1.empno=e2.mgr) 也可以
相关文章推荐
- Sql查询空值结果参与运算
- oracle查询结果运算函数:union /minus /instersct 函数的用法
- Oracle空值(null)运算陷阱
- 当request某个属性值变化之后,它原本所付给的int 变量的值似乎没有跟着改变,必须int变量参与运算,如+1或-1,或者直接用request获取值才能得到想要的结果。否则只能得到最开始所付的值
- 关于Oracle中有null参与的逻辑或,逻辑与的操作结果
- oracle的聚集函数wm_concat()和listagg()不适用时,自定义通用的聚集函数合并查询结果列
- 关于PHP的浮点运算取floor(3)得到结果2的奇怪问题
- OCP-1Z0-051 第17题 null参与运算后仍是null
- 刨根问底儿 -- intVal($str) 跟 (int) $str 的运算结果有什么区别
- SQL数据库查询实现行转列与列转行结果SQL语句(适用于SqlServer数据库,oracle需要修改case when语句)
- sqlserver利用sp_oa系列存储过程调用xml+xsl eval输出运算结果的一个例子。
- python连接oracle,把计算结果存入本地excel并发送带附件邮件
- Oracle中位运算[转载]
- 《第九周任务三》定义分数类中《和》运算符重载,实现分数的输入输出,改造源程序中对运算结果显示方式,使程序读起来更自然
- 深入理解Spark 2.1 Core (四):运算结果处理和容错的原理与源码分析
- oracle取随机结果测试
- mybatis 调用oracle中的存储过程返回结果集
- Oracle - 为子查询提供动态结果集
- 润乾报表对“null”参与表达式运算的处理
- oracle 当查询结果有重复记录时 选择时间最近的一条