8 个回答
第四种情况:导致空指针异常
当我们使用一些函数,比如求和函数sum(column) 或者平均值之类的函数,如果所求的字段中有空值,所求的值就会为空而非0。
如果 sum 查询的结果为 NULL 就可以能会导致程序执行时空指针异常(NPE),我们来演示一下这个问题。
为了演示这个问题,首先我们先构建一张表和一些测试数据:
接下来我们使用 sum 查询,执行以下 SQL:
查询执行结果如下:
当查询的结果为 NULL 而非 0 时,就可以导致空指针异常。
解决空指针异常,可以使用ifnull()对空值进行处理来避免空指针异常:
当我们使用一些函数,比如求和函数sum(column) 或者平均值之类的函数,如果所求的字段中有空值,所求的值就会为空而非0。
如果 sum 查询的结果为 NULL 就可以能会导致程序执行时空指针异常(NPE),我们来演示一下这个问题。
为了演示这个问题,首先我们先构建一张表和一些测试数据:
接下来我们使用 sum 查询,执行以下 SQL:
查询执行结果如下:
当查询的结果为 NULL 而非 0 时,就可以导致空指针异常。
解决空指针异常,可以使用ifnull()对空值进行处理来避免空指针异常:
发布于:1年前 (2023-05-06) IP属地:四川省
第三种情况:select数据丢失
如果某列存在 NULL 值时,如果执行非等于查询(<>或者!=)会导致为 NULL 值的结果丢失,比如下面的这些数据:
当我们查询name不等于"Java"的所有数据时,预期结果应该是id从2到10的数据,但是执行以下sql查询时:
查询结果如下所示:
可以看出id=9和id=10的name为 NULL 的两条数据没有查询出来,这个结果并不符合我们的正常预期。
要解决以上的问题,只要修改条件,将姓名不等于Java或者是空值的查出来即可,执行 SQL 如下:
执行结果如下:
可以看出10条数据都查询出来了,这个结果符合我们的正常预期。
如果某列存在 NULL 值时,如果执行非等于查询(<>或者!=)会导致为 NULL 值的结果丢失,比如下面的这些数据:
当我们查询name不等于"Java"的所有数据时,预期结果应该是id从2到10的数据,但是执行以下sql查询时:
查询结果如下所示:
可以看出id=9和id=10的name为 NULL 的两条数据没有查询出来,这个结果并不符合我们的正常预期。
要解决以上的问题,只要修改条件,将姓名不等于Java或者是空值的查出来即可,执行 SQL 如下:
执行结果如下:
可以看出10条数据都查询出来了,这个结果符合我们的正常预期。
发布于:1年前 (2023-05-06) IP属地:四川省
第二种情况:distinct 数据丢失
当使用语句count(distinct column1,column2)时,如果有一个字段值为空,即使另一列有不同的值,那么查询的结果也会将数据丢失,如下图:
查询执行结果如下:
数据库的原始数据如下:
从上述图所示,mobile列的10条数据都是不一样,但是查询的结果却只有8条。
当使用语句count(distinct column1,column2)时,如果有一个字段值为空,即使另一列有不同的值,那么查询的结果也会将数据丢失,如下图:
查询执行结果如下:
数据库的原始数据如下:
从上述图所示,mobile列的10条数据都是不一样,但是查询的结果却只有8条。
发布于:1年前 (2023-05-06) IP属地:四川省
第一种情况:count数据丢失
count是用来计数的,当表中某个字段存在NULL 值时,就会造成count计算出来的数据丢失,例如:
查询执行结果如下:
从上述结果可以看出,count(*)和count(name)的值不一样,即当使用的是 count(name) 查询时,就丢失了两条值为 NULL 的数据。
所以,如果某列存在 NULL 值时,就是用 count(*) 进行数据统计。
count是用来计数的,当表中某个字段存在NULL 值时,就会造成count计算出来的数据丢失,例如:
查询执行结果如下:
从上述结果可以看出,count(*)和count(name)的值不一样,即当使用的是 count(name) 查询时,就丢失了两条值为 NULL 的数据。
所以,如果某列存在 NULL 值时,就是用 count(*) 进行数据统计。
发布于:1年前 (2023-05-06) IP属地:四川省
我来回答
您需要 登录 后回答此问题!