not in关键字使用的细节

2023-05-31  本文已影响0人  moutory

前言

讲讲not in关键字使用上的小坑

我们知道,可以通过使用select * from table where filed in (xxx,xxx)的方式来筛选出某个字段的值存在于给定集合范围内的记录,通过not in 关键字来判断某个字段的不存在给定集合范围内的数据。但是对于not in关键字,上述的规则在碰上存在null值的集合范围内就不再生效了

mysql中,0NULL都表示false,所以如果说,对于select * from table where field = NULL这种sql,由于所有值和NULL比较都会返回NULL,所以是查不到任何数据的。对于NULL值的比较,需要用IS NULL或者IS NOT NULL来进行判断。

关于NULL关键字,我们可以看一下官方的解释:https://dev.mysql.com/doc/refman/8.0/en/working-with-null.html

mysql官网解释

官网说了,NULL可以看做是未确认的值(注意,不是不存在的值),所有直接用=><>等规则和NULL比较的值,结果并不是我们猜想的true或者false,而是返回NULL

OK,说回NULL值对not in的影响
对于not in左右两侧存在NULL,且左右两侧确实没有相同的值这种场景,比较的结果都会是NULL

mysql执行结果

对于not in左右两侧存在NULL,且左右两侧存在相同的值这种场景,比较的结果会是0

mysql执行结果

我们在上文有提过,无论是0还是NULL,对于mysql来说都会识别为false,所以select * from table where field not in (NULL,a,b)这种类型的sql,即使field的值为c,也是没有数据返回的。但是需要注意的是,对于in关键字来说,是可以不受NULL影响,正常查到数据的。

参考文章

MySQL IN和NOT IN用法详解:http://c.biancheng.net/view/7193.html
Working with NULL Values:https://dev.mysql.com/doc/refman/8.0/en/working-with-null.html

上一篇下一篇

猜你喜欢

热点阅读