前言
在 mysql 中,nullif、ifnull 和 if 是用于处理 null 值的三种不同的函数。
1. nullif 函数
nullif 函数用于比较两个表达式,如果它们的值相等,则返回 null,否则返回第一个表达式的值。语法如下:
nullif(expr1, expr2)
- expr1 和 expr2 是要比较的两个表达式。
示例:
select nullif(5, 5); -- 返回 null,因为两个值相等 select nullif(5, 10); -- 返回 5,因为两个值不相等
2. ifnull 函数
ifnull 函数用于判断第一个表达式是否为 null,如果是,则返回第二个表达式的值;否则,返回第一个表达式的值。语法如下:
ifnull(expr1, expr2)
- expr1 是要判断是否为 null 的表达式。
- expr2 是如果 expr1 为 null 时返回的值。
示例:
select ifnull(null, 'default_value'); -- 返回 'default_value',因为第一个表达式为 null
select ifnull('not_null_value', 'default_value'); -- 返回 'not_null_value',因为第一个表达式不为 null
3. if 函数
if 函数用于根据一个条件返回两个值中的一个。语法如下:
sqlif(condition, value_if_true, value_if_false)
- condition 是一个条件表达式。
- value_if_true 是如果条件为真时返回的值。
- value_if_false 是如果条件为假时返回的值。
示例:
select if(5 > 3, 'true_value', 'false_value'); -- 返回 'true_value',因为条件为真 select if(5 < 3, 'true_value', 'false_value'); -- 返回 'false_value',因为条件为假
4. 区别总结
- nullif 用于比较两个表达式,如果相等则返回 null。
- ifnull 用于判断一个表达式是否为 null,是则返回指定的默认值。
- if 用于根据条件返回两个不同的值。
附:mysql函数ifnull使用的注意事项
首先建一张简单的表,用于sql语句的操作

建表语句如下:
create table `student` ( `id` int(11) not null auto_increment comment '主键' , `name` varchar(8) character set utf8 collate utf8_general_ci not null default '' comment '名字' , `score` int(4) not null default 0 comment '分数' , primary key (`id`) );
手动创建数据如下:

现在开始正题:
a. ifnull的作用是什么?下面一个简单的sql和结果说明,如果ifnull(a,b),a接收的值为null,则返回b,否则返回a;
select ifnull(null,0);

b. 以下sql语句,大家可以预测下结果,按照ifnull函数的作用,应该返回0才对,可是结果并不是这样。
select ifnull(score,0) from student where id = 4;
返回结果,居然是null,与预期的结果0不一致。

c. 以下语句返回正确结果0;
select ifnull((select score from student where id = 4),0);
总结:使用b方式使用ifnull、sum函数等需要确保有查询记录,否则也将返回null值,当然也可使用c方式避免返回null值,避免程序中出现npe异常。
总结
到此这篇关于mysql中nullif 、ifnull、if的用法和区别的文章就介绍到这了,更多相关mysql nullif 、ifnull、if用法内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论