count(*)
与count(列名)
意义不同
count(*) 会统计某列为 NULL 的行,而 count(列名) 不会统计此列为 NULL 的行count(distinct column1,column2)
当使用语句count(distinct column1,column2)时,如果有一个字段值为空,即使另一字段有不同的值,那么查询的结果也不会统计这一行
例如:id 为主键,activity_configure_json允许null
select distinct id , activity_configure_json from yc_activity -- 195行
select count(distinct id , activity_configure_json) from yc_activity -- 49
<>或者!=
某列存在 NULL 值时,如果执行非等于查询(<>或者!=)会导致为 NULL 值的结果丢失
正确写法:
select * from yc_activity where activity_configure_json != 'java' or isnull(activity_configure_json)
- 求和函数或者平均值之类的函数
当查询不到数据时,求和函数或者平均值之类的函数返回null而非0,java代码可能空指针异常
推荐写法:
select ifnull(sum(num),0) from yc_activity where activity_configure_json = 'css'
PS:
1.推荐使用isnull(cloumn)
来判断 NULL 值,相比is null
,可读性更好,执行效率也更快一些
2.设计表,可以设置空值(‘’)或 0 作为其默认值