一尘不染

IN运算符SQL

sql

我有一个名为NUMS的表,其中只有n列。
然后在其中填充值1,2,3,4,5,null。

现在查询

SELECT n FROM Nums 
 WHERE n IN (1, 2, null)

在这种情况下,我想它已转换为

SELECT n FROM Nums 
 Where n = 1 OR n = 2 OR n = null

我也在比较n和一个应该产生未知值的null值,它应该返回一个空集。但是它返回1,2(null不返回,尽管包含在IN运算符中)

现在查询

SELECT n FROM Nums WHERE n NOT IN(1, 2, null)

…转换为:

SELECT n FROM Nums 
 Where n!=1 AND n!=2 AND n!=null

在这里,我上面所说的有效,并且不返回任何内容。

任何人都可以详细解释发生了什么。


阅读 212

收藏
2021-05-05

共1个答案

一尘不染

好,我找到了答案

SELECT n FROM Nums    
WHERE n NOT IN (1, 2, null)

评估为

SELECT n FROM Nums  
n!=1 AND n!=2 AND n!=null

上次比较的结果将永远是未知的。
AND的真值表显示,只要其中一个未知数(U,T)(U,F),(U,U)被引用,结果就只能是U或F(U =未知,F =False)因此,它不会包含在结果集中。

的情况下

SELECT n FROM Nums
WHERE n IN (1, 2, null)

等于

SELECT n FROM Nums
WHERE n = 1 OR n =2 OR n=null

现在对于n = 1的行,操作n = 1将变为true ,对于n = 2的行,操作n = 2 将变为true,并且对于所有行n = null将是未知的

因此,它在结果集中给出1和2。
希望大家喜欢。
任何人都可以将我的回复标记为答案

2021-05-05