select 'true' from dual where 1 not in (null,1);
当我们执行此操作时,将不会有任何结果
我的问题是:
以上查询在逻辑上等效于
select 'true' from dual where 1 != null and 1 != 1;
就像上面的声明一样,不会有任何结果
请说清楚?
正确(但请注意,这IN是一个运算符,而不是一个子句,它通常在SQL中这样工作,不仅适用于Oracle)。
IN
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(在练习中保留),并且也不会返回任何行。
WHERE 1 NOT IN (NULL, 2)
WHERE UNKNOWN