Sql 如何';在';子句在oracle中工作

Sql 如何';在';子句在oracle中工作,sql,sql-server,oracle,oracle10g,Sql,Sql Server,Oracle,Oracle10g,当我们执行此操作时,将不会产生任何结果 我的问题是: 上述查询是否在逻辑上等价于 select 'true' from dual where 1 not in (null,1); 这将不会产生任何结果,正如上面的陈述 请澄清?是的 select 'true' from dual where 1 != null and 1 != 1; 相当于 select something from table where column not in (1,2,3); IN语句是OR语句的集合,而NOT

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

我的问题是:

上述查询是否在逻辑上等价于

select 'true' from dual where 1 not in (null,1);
这将不会产生任何结果,正如上面的陈述

请澄清?

是的

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

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

IN语句是OR语句的集合,而NOT IN语句是AND语句的集合,但它也不等于

因此,NOT IN相当于:

select something from table where column != 1 and column != 2 and column != 3;
1 <> NULL
AND 1 <> 1
AND ...
where 1 not in (null,1)

请注意,由于NULL的古怪性质,在集合中使用NULL将不起作用。

是。这是正确的。此外,空值应与空值进行比较。与空值进行比较的脚本问题。你应该使用

1 = NULL
OR 1 = 1
OR ...
实际上,NULL是一个未定义的值。任何与NULL的比较都不会给出True或False,而是NULL。偶数NULL=NULL

这就是为什么您的1 not in(null,1)不起作用。

正确(但请注意,
in
是一个运算符,而不是子句,它在SQL中通常是这样工作的,而不仅仅是在Oracle中)

相当于:

select something from table where column != 1 and column != 2 and column != 3;
1 <> NULL
AND 1 <> 1
AND ...
where 1 not in (null,1)
这应该写成:

where 1 != null and 1 != 1

并进一步为:

WHERE UNKNOWN AND FALSE
因此,它正确地不返回任何行



请注意,如果您有
其中1不在(NULL,2)
,它将计算为
其中未知的
(作为练习)并且也不会返回任何行。

是的,
不在()
在逻辑上等同于
链还有=
中的肯定条件
相当于一个
或=
链,请小心列表中的空值。由于为空,NOT IN将不返回行。许多关于NOT IN vs NOT的讨论都显示了NULL的影响。@问题可能在于NOT IN和NULLs。我之所以提到NOT IN vs NOT EXISTS,是因为有很多好的文章讨论了每种方法处理空值的差异。例如:@这是否意味着集合中至少包含一个空值,而不是我们在子句中不能使用的空值?我不确定如何传入值,但对于空值,您需要显式地具有“且A不为空”,在这种情况下,结果实际上是
False
(因为列表中的
1
)。
WHERE UNKNOWN AND FALSE
WHERE FALSE