如何“在”条款在Oracle工作(How does 'in' clause work

2019-06-26 00:25发布

select 'true' from dual where 1 not in (null,1);

当我们执行这个这将导致什么

什么我的问题是:

是上述查询逻辑上等同于

select 'true' from dual where 1 != null and 1 != 1;

这将导致什么,就像上面的语句

请澄清?

Answer 1:

正确的(但请注意, IN为运营商,而不是一个条款,它的工作原理是这样的SQL一般,不仅适用于Oracle)。

where 1 not in (null,1)

相当于:

where 1 != null and 1 != 1

这确实应该写成:

WHERE 1 NOT IN (NULL, 1)

WHERE 1 <> NULL AND 1 <> 1

这是相同的:

WHERE (1 <> NULL) AND (1 <> 1)

计算结果为:

WHERE UNKNOWN AND FALSE

并进一步为:

WHERE FALSE

所以,正确不返回行。


请注意,如果你有WHERE 1 NOT IN (NULL, 2)它会评估为WHERE UNKNOWN (作为一个练习左)和没有行会或者返回。



Answer 2:

你的脚本与NULL值进行比较的问题。 您应该使用

column is null and column = 1

其实NULL为不定值。 与任何为NULL的比较 - 给非真非假,但NULL。 即使NULL = NULL

这就是为什么你没有1中(NULL,1)不工作。



Answer 3:

对,他们是。

select something from table where column not in (1,2,3);

相当于

select something from table where column != 1 and column != 2 and column != 3;


Answer 4:

中陈述或语句的集合,同时也不是和语句的集合 - 但它也并不等于。

因此,NOT IN等同于:

1 <> NULL
AND 1 <> 1
AND ...

虽然在将相当于:

1 = NULL
OR 1 = 1
OR ...

需要注意的是集合中有NULL将无法正常工作,由于NULL的奇特性质。



Answer 5:

是。 它是正确的。 此外NULL值应为NULL进行比较



文章来源: How does 'in' clause works in oracle