我有一个名为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
在这里,我上面所说的有效,并且不返回任何内容。
任何人都可以详细解释发生了什么。
好,我找到了答案
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 = 1 OR n =2 OR n=null
现在对于n = 1的行,操作n = 1将变为true ,对于n = 2的行,操作n = 2 将变为true,并且对于所有行n = null将是未知的
因此,它在结果集中给出1和2。 希望大家喜欢。 任何人都可以将我的回复标记为答案