Mad*_*ddy 6 sql sql-server oracle oracle10g
select 'true' from dual where 1 not in (null,1);
Run Code Online (Sandbox Code Playgroud)
当我们执行此操作时,什么都不会产生
我的问题是:
以上查询在逻辑上是等价的
select 'true' from dual where 1 != null and 1 != 1;
Run Code Online (Sandbox Code Playgroud)
这将不会像上述声明那样产生任何结果
请澄清?
正确(但请注意,这IN
是一个运算符,而不是一个子句,它在SQL中的工作方式与此类似,不仅适用于Oracle).
where 1 not in (null,1)
Run Code Online (Sandbox Code Playgroud)
相当于:
where 1 != null and 1 != 1
Run Code Online (Sandbox Code Playgroud)
哪个应该写成:
WHERE 1 NOT IN (NULL, 1)
Run Code Online (Sandbox Code Playgroud)
和
WHERE 1 <> NULL AND 1 <> 1
Run Code Online (Sandbox Code Playgroud)
这与:
WHERE (1 <> NULL) AND (1 <> 1)
Run Code Online (Sandbox Code Playgroud)
其评估结果为:
WHERE UNKNOWN AND FALSE
Run Code Online (Sandbox Code Playgroud)
并进一步:
WHERE FALSE
Run Code Online (Sandbox Code Playgroud)
因此,它正确地返回没有行.
请注意,如果有WHERE 1 NOT IN (NULL, 2)
,它将评估为WHERE UNKNOWN
(作为练习留下),也不会返回任何行.