当数据的值为NULL的时候,可能出现各种意想不到的效果,让人防不胜防,我们来看看NULL导致的各种神坑,如何避免?

一、比较运算符中使用NULL

  任何值和NULL使用运算符(>、<、>=、<=、!=、<>)或者(in、not in、any/some、all)比较时,返回值都为NULL,NULL作为布尔值的时候,不为1也不为0。

二、IN、NOT IN和NULL比较  

  IN和NULL比较:  当IN和NULL比较时,无法查询出为NULL的记录。

  NOT IN 和NULL比较:  当NOT IN 后面有NULL值时,不论什么情况下,整个sql的查询结果都为空。  

三、EXISTS、NOT EXISTS和NULL比较

  =不能比较NULL

四、判断NULL只能用IS NULL、IS NOT NULL

  判断是否为空只能用IS NULL、IS NOT NULL。

五、聚合函数中NULL的坑  

  count(a)返回了2行记录,a字段为NULL的没有统计出来。

  count(b)返回了1行记录,为NULL的2行记录没有统计出来。

  count(*)可以统计所有数据,不论字段的数据是否为NULL。

  select count(a) from test1 where a is null; --返回为0,说明如下:

    count(字段)无法统计字段为NULL的值,count(*)可以统计值为null的行。

六、NULL不能作为主键的值  

  结论:当字段为主键的时候,字段会自动设置为not null。

  看了上面这些还是比较晕,NULL的情况确实比较难以处理,容易出错,最有效的方法就是避免使用NULL。所以,强烈建议创建字段的时候字段不允许为NULL,设置一个默认值。

七、总结

  • NULL作为布尔值的时候,不为1也不为0

  • 任何值和NULL使用运算符(>、<、>=、<=、!=、<>)或者(in、not in、any/some、all),返回值都为NULL

  • 当IN和NULL比较时,无法查询出为NULL的记录

  • 当NOT IN 后面有NULL值时,不论什么情况下,整个sql的查询结果都为空

  • 判断是否为空只能用IS NULL、IS NOT NULL

  • count(字段)无法统计字段为NULL的值,count(*)可以统计值为null的行

  • 当字段为主键的时候,字段会自动设置为not null

  • NULL导致的坑让人防不胜防,强烈建议创建字段的时候字段不允许为NULL,给个默认值

最新文章

  1. POJ 3422 Kaka&#39;s Matrix Travels
  2. IOS 设置导航栏全局样式
  3. CSS transition 过渡 详解
  4. struts.xml 配置详解
  5. hanio 塔和递规的理解。
  6. Echart 商业级数据图表
  7. HDU 1707
  8. UIButton上使用UIEdgeInsetsMake让title跟图片对齐
  9. 初探Linux进程管理机制
  10. CLR has been unable to transition from COM context for 60 seconds
  11. eclipse +cvs 的基本使用方法(一)
  12. 记JavaScript的入门学习(三)
  13. SPI驱动调试感悟
  14. [Swift]LeetCode30. 与所有单词相关联的字串 | Substring with Concatenation of All Words
  15. laravel 路由缓存
  16. matlab的conv2、imfilter、filter2
  17. wifidog源码分析 - wifidog原理
  18. Ubuntu 14.04 安装 Blender,并放桌面
  19. 【VB.NET】利用纯真IP数据库查询IP地址及信息
  20. vue view 表单验证正常逻辑

热门文章

  1. ES6深入浅出-4 迭代器与生成器-3.生成器 &amp; for...of
  2. How to Plan and Configure YARN and MapReduce 2 in HDP 2.0
  3. ABAP DEMO33 选择周的搜索帮助
  4. springboot 项目基本目录包结构
  5. HTTPS小结 、TSL、SSL
  6. Tools - 在线编译环境和工具汇总
  7. web端自动化——Selenium3+python自动化(3.7版本)-火狐62版本环境搭建
  8. logstash 6.6.0 读取nginx日志 插入到elasticsearch中
  9. docker 搭建私有 docker hub
  10. java当中JDBC当中请给出一个sql server的stored procedure例子