一尘不染

``in''子句在oracle中如何工作

sql

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

当我们执行此操作时,将不会有任何结果

我的问题是:

以上查询在逻辑上等效于

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

就像上面的声明一样,不会有任何结果

请说清楚?


阅读 206

收藏
2021-05-05

共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(在练习中保留),并且也不会返回任何行。

2021-05-05