MySQL中case when的两种基本用法及区别总结

 更新时间:2023年05月05日 10:03:12   作者:Backcanhave7  
在mysql中case when用于计算条件列表并返回多个可能结果表达式之一,下面这篇文章主要给大家介绍了关于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值判断

总结

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

相关文章

  • MySQL5.7.10 安装文档教程详解

    MySQL5.7.10 安装文档教程详解

    这篇文章主要介绍了MySQL5.7.10 安装文档教程详解,需要的朋友可以参考下
    2017-02-02
  • MySQL产生随机数并连接字符串的方法示例

    MySQL产生随机数并连接字符串的方法示例

    这篇文章主要介绍了MySQL产生随机数并连接字符串的方法,简单分析了相关函数,并结合实例形式给出了相应的SQL语句实现方法,需要的朋友可以参考下
    2017-05-05
  • MySQL联合查询实现方法详解

    MySQL联合查询实现方法详解

    联合查询union将多次查询(多条select语句)的结果,在字段数相同的情况下,在记录的层次上进行拼接,这篇文章主要给大家介绍了关于Mysql联合查询的那些事儿,需要的朋友可以参考下
    2022-11-11
  • MySQL中select语句使用order按行排序

    MySQL中select语句使用order按行排序

    本文介绍MySQL数据库中执行select查询语句,并对查询的结果使用order by 子句进行排序
    2016-04-04
  • MySQL索引的缺点以及MySQL索引在实际操作中有哪些事项

    MySQL索引的缺点以及MySQL索引在实际操作中有哪些事项

    以下的文章主要介绍的是MySQL索引的缺点以及MySQL索引在实际操作中有哪些事项是值得我们大家注意的,我们大家可能不知道过多的对索引进行使用将会造成滥用,需要的朋友可以了解下
    2012-12-12
  • 解读索引列中有null值会不会使索引失效

    解读索引列中有null值会不会使索引失效

    这篇文章主要介绍了解读索引列中有null值会不会使索引失效问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 让MySQL中某个表的操作不生成binlog日志的问题解决

    让MySQL中某个表的操作不生成binlog日志的问题解决

    文章介绍了四种方法让MySQL中某个表的操作不生成binlog日志:会话级临时关闭binlog、通过复制过滤规则、调整binlog格式和全局禁用binlog,每种方法都有其适用场景和局限性,建议优先使用会话级临时关闭方法,并根据具体需求选择合适的方案,感兴趣的朋友跟随小编一起看看吧
    2025-03-03
  • 使用Canal和Kafka解决MySQL与缓存的数据一致性问题

    使用Canal和Kafka解决MySQL与缓存的数据一致性问题

    这篇文章主要介绍了使用Canal和Kafka解决MySQL与缓存的数据一致性问题,文中通过图文结合的方式给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-07-07
  • CentOS系统下如何设置mysql每天自动备份

    CentOS系统下如何设置mysql每天自动备份

    备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的存储介质的过程。本文将详细介绍在CentOS系统下如何设置mysql每天自动备份,有需要的朋友们下面来一起看看吧。
    2016-10-10
  • Navicat出现无法远程连接MySql服务器问题的解决办法

    Navicat出现无法远程连接MySql服务器问题的解决办法

    这篇文章主要介绍了Navicat出现无法远程连接MySql服务器问题的解决办法,文章通过思路判断出现问题的情况,然后进行逐一排查,确定问题出现的原因并给出解决办法,本文对此问题的解决介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08

最新评论