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值判断
总结
到此这篇关于MySQL中case when的两种基本用法及区别总结的文章就介绍到这了,更多相关MySQL中case when用法内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!