SQL关于null的坑

根据我们的常规逻辑,集合a与集合!a就构成了一个全集,但在SQL中,我们会发现真理也是相对的。

场景一:对于table  user的数据如下:

其中用户“DDD”的年龄未知,当我们执行如下两句SQL:

1)select *  from user where age>=18;

2)  select *  from user where age<18;

结果分别如下:

 

查看两个结果,是不是发现很奇怪,结果1和结果2相加居然不是全集(少了用户DDD),可能因为是比较数值,大家还比较好理解,不容易入坑,那就看下面两行SQL(典型的a与!a的关系):

场景二:

1) select * from user where age in (18,30);

2) select *  from user where age not in (18,30);

相信直接看这两行脚本,大家肯定认为结果1是用户“AAA”和“CCC”,结果2是用户"BBB"和用户“DDD”,但实际并非如此,如下图:

sql看起来是a与!a都关系,但他们的结果集的并集却并不是全集,null跳出五行之外,不在三界之中!

所以注意null带来的坑!

欢迎转载,但请标明来源,谢谢!

猜你喜欢

转载自blog.csdn.net/hj12312/article/details/79053088