在sql中使用not的区别

olmpazwi  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(263)

以下两者之间有区别吗
选择。。。。其中id不在(。。。一些值…)

选择。。。。在(。。。一些值…)
如果id有空值,那么第一个就有问题。在这种情况下,结果集中不考虑具有空值的行,但如果考虑了:

SELECT ... WHERE id is NULL

我得到了一个非空的结果集。为什么会这样?这个答案取决于数据库引擎吗?
查询如下:

select id, name from mytable where id not IN ('1', '2','3','4', '5', '6', '7') limit 10;
 id | name 
--------+---------+--------+--------+---------
(0 rows)

select id, name from mytable where id is null limit 10;
....
(10 rows)

在这种情况下,id列的可能值是'1',…,'7',空

sqougxex

sqougxex1#

是的,你很难理解。因为它不遵循布尔逻辑。一种看待它的方式是它说“我不知道”(或者在某些情况下“我不在乎”)。因此,要回答您的问题,“is null element of a list like('1','2','3')?”答案为null,如果您将问题修改为“is null element not of a list like('1','2','3')?”答案仍然为null。它包含所有布尔运算符和大多数字符串运算符(参见fiddle)。最安全的过程,直到你习惯了它,当你怀疑测试它,但不要让结果让你惊讶。

ve7v8dk2

ve7v8dk22#

两者完全相等。如果有任何值是 NULL .
如果 NOT IN 列表是 NULL ,那么 NOT IN 返回或 FALSE (如果值在列表中)或 NULL .
另一方面,如果列表中的任何值 NULL ,那么 IN 返回或 TRUE 或者 NULL . 那很好。否定会产生 TRUE 或者 NULL .

相关问题