浅谈0和NULL在数据库中的区别
前缀
大家在平常的软件项目开发过程当中肯定会遇到比如说,数据返回0或者null的情况。
从某种角度来说返回0和返回null其实他们都是有意的,即存在就是合理的。
那么为什么要分析零和null有什么区别呢?这其实跟我在项目开发的过程当中经常会遇到这种情况,尤其是在最近做后台管理系统中的一个模块--数据统计的时候就要经常跟这两个数值打交道。
好了下面我们就开始今天的话题吧!!!
概念性
首先我们先看零和null这两个值在数据库中的含义
NULL的含义: null在数据库中表示的是一个字段没有值,它不是一个具体的数值,而是一个特殊的标记,类似于占位吧,我是这样理解的。
0的含义: 相比于null,0是一个具体的数字,能够说明问题的一个值,而且0是可以参与MYSQL数据库聚合函数数学运算的,而且是可以成为数据结果的一个值。
它们两个的主要的就是这些内容,下来我们看看它们两个在数据库中是如何进行使用。
操作性
我们在数据库操作的时候创建表正常的字段一般就默认为null,个别字段比如说是否删除字段,它有两个状态0:未删除,1删除,这个时候,我们比如说查询数据的时候,这个0是可以作为判断条件的。如下图
接下来我们将他们使用在聚合函数中,看看它们的表现如何
先创建一张表并插入数据:
数据库插入成功以后图例
就以这样表为例,我们使用聚合函数count统计表中的卡片的总数,未激活卡片总数,和激活卡片总数。
我们使用case...when...函数进行条件筛选,case...when...的写法格式这里就不在多说,网上都能查到。
我们主要演练的是case...when...函数中使用0和null的区别。
使用null 结果:
SELECT
COUNT( CASE WHEN 1 = 1 THEN 1 ELSE NULL END ) AS totalCards,
COUNT( CASE WHEN is_activation = 1 THEN 1 ELSE NULL END )AS notActivationCards,
COUNT( CASE WHEN is_activation = 2 THEN 1 ELSE NULL END )AS activationCards
FROM
t_member_card
WHERE is_delete = 0;
使用0结果:
SELECT
COUNT( CASE WHEN 1 = 1 THEN 1 ELSE 0 END ) AS totalCards,
COUNT( CASE WHEN is_activation = 1 THEN 1 ELSE 0 END )AS notActivationCards,
COUNT( CASE WHEN is_activation = 2 THEN 1 ELSE 0 END )AS activationCards
FROM
t_member_card
WHERE is_delete = 0;
可以看到,使用null统计出来的结果是正确的,而使用0统计出来的结果是不对的。
所以有时候null也是有作用的,存在即是合理的。
以上分享内容大概就这么多,如果不对的地方请指出,并加以改正。
转载自:https://juejin.cn/post/7393310486149021707