ORACLE的SQL语句,错在哪了,怎么老是未选定行 200

selectempnofromempwhereempnonotin(selectmgrfromemp);... select empno from emp where empno not in (select mgr from emp); 展开
 我来答
swallowzyan88
2017-08-09
知道答主
回答量:2
采纳率:0%
帮助的人:2190
展开全部
下面是针对本文题的分析:

1。 首先来说说Oracle中的NULL。

Oracle中的NULL代表的是无意义,或者没有值。将NULL和其他的值进行逻辑运算,运算过程中,NULL的表现更象是FALSE。
下面请看真值表:
AND NULL
OR NULL

TRUE
NULL
TRUE

FALSE
FALSE
NULL

NULL
NULL
NULL

另外,NULL和其他的值进行比较或者算术运算(<、>、=、!=、+、-、*、/),结果仍是NULL。

如果想要判定某个值是否为NULL,可以用IS NULL或者IS NOT NULL。
再来看看NOT IN。根据逻辑运算关系,我们知道,NOT (X=Y OR N=M) 等价于 X!=Y AND N!=M,那么:
SELECT

*

FROM

table1 A

WHERE

A.col1

not

in

(

20

,

50

,

NULL

)

等价于

SELECT

*

FROM

table1 A

WHERE

A.col1

!=

20

AND

A.col1

!=

50

AND

A.col1

!=

NULL
根据NULL的运算特性和真值表,该语句无论前两个判定条件是否为真,其结果一定是NULL或者FALSE。故绝对没有任何记录可以返回。

这就是为什么语句1

查不到应有结果的原因。当然,如果你用NOT IN的时候,预先在子查询里把NULL去掉的话,那就没问题了
select empno from emp where empno not in (select mgr from emp where mgr is not null);
sunguichun2003
2016-07-17 · TA获得超过752个赞
知道小有建树答主
回答量:754
采纳率:0%
帮助的人:520万
展开全部
你这个语句是啥逻辑?empno与mgr含义一样?怎么是同一张表emp?
更多追问追答
追问
scott/tiger里的,empno是员工编号,mgr是经理编号,有些员工也是经理
追答
如果是经理,他的员工编号和经理编号是一样的吗?如果不一样,你这个语句不会有结果
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式