首页 > 文章列表 > MySQL中case when的用法及区别是什么?

MySQL中case when的用法及区别是什么?

mysql
159 2023-05-08

MySQL中case when的基本用法及区别是什么

MySQL中的case when有用两种用法,官方文档中的说明如下:

用法一:

CASE case_value

    WHEN when_value THEN statement_list

    [WHEN when_value THEN statement_list] ...

    [ELSE statement_list]

END CASE

用法二:

CASE

    WHEN search_condition THEN statement_list

    [WHEN search_condition THEN statement_list] ...

    [ELSE statement_list]

END CASE

下面通过具体示例来说明case when这两种用法的区别:

创建salary表,并向salary表中插入数据:

# 创建salary表:

create table salary(

id int,

name char(1),

sex char(1),

salary int

)engine myisam charset utf8;

#向salary表中插入数据:

insert into salary values

(1,'A','m',2500),

(2,'B','f',1500),

(3,'C','m',5500),

(4,'D','f',500);

示例一:在查询语句中实现更改salary表中员工的性别,即如果员工的性别是‘m’,则将其改为‘f’,反之如果性别为‘f’,则将其改为‘m’。

采用case when的第一种用法:

select id,name,

case sex

when 'f' then 'm'

else 'f' end as new_sex,salary from salary;

这种用法通过比较case后面的case_value和第一个when后面的when_value,若二者相等则给new_sex赋一个指定的值,若二者值不相等,则比较case_value与第二个when后面的when_value是否相等,以此类推。若case_value与所有的when_value都不相等,且有else语句的话,则把else后面的值赋给new_sex,否则把null值赋给new_sex。

采用case when的第二种用法:

select id,name,case

when sex='f' then 'm'

else 'f' end as new_sex,salary from salary;

上述代码中,when后面是一个逻辑表达式,若表达式为真,则把then后面的值赋给new_sex;若第一个when后面表达式为假,则查看第二个when后面的逻辑表达式,以此类推的;若所有when后面的逻辑表达式均为假,且有else语句的话,则把else后面的值赋给new_sex,否则把null值赋给new_sex.

示例二:在查询语句中实现将salary表中员工的工资归类。归类依据是,工资在1000元以下的归为‘low’类,工资在1000-3000元范围归为‘middle’类,工资在3000元以上的归为‘high’类。

这种情况只能采用case when的第二种用法:

select id,name,sex,case

when salary > 3000 then 'high'

when salary between 1000 and 3000 then 'middle'

else 'low' end as salary_level from salary;

假如以3000元为界限,将3000元以上的工资归为‘high'类,3000元以下包括3000元的工资归为‘low’类,则此时也可以采用case when的第一种用法:

select id,name,sex,case salary>3000

when True then 'high'

else 'low' end as salary_level from salary;

总结:由前文所述可知,case when的第一类用法只适用于二值比较问题,而case when的第二种用法的适用范围更广。因此我将case when的第一中用法理解为简单条件赋值,第二种用法理解为复杂条件赋值。

补充:MySQL中的case when 中对于NULL值判断