返回

MySQL之case...when...then...end的详细使用,保姆级教程

后端

掌握MySQL中的case...when...then...end语句,成为SQL高手

初识case...when...then...end

case...when...then...end语句是MySQL中用于根据不同条件返回不同结果的强大语句。其语法如下:

CASE
    WHEN 条件1 THEN 结果1
    WHEN 条件2 THEN 结果2
    ...
    ELSE 结果N
END

简单case函数

简单case函数根据字段名称的值返回结果。语法如下:

CASE 字段名称
    WHEN1 THEN 结果1
    WHEN2 THEN 结果2
    ...
    ELSE 结果N
END

例如,根据学生的成绩评定等级:

SELECT
    CASE 成绩
        WHEN 90~100 THEN 'A'
        WHEN 80~89 THEN 'B'
        WHEN 70~79 THEN 'C'
        WHEN 60~69 THEN 'D'
        ELSE 'F'
    END AS 等级
FROM 学生成绩表;

case搜索函数

case搜索函数根据字段名称的值是否匹配指定的模式返回结果。语法如下:

CASE
    WHEN 字段名称 LIKE '模式' THEN 结果1
    WHEN 字段名称 LIKE '模式' THEN 结果2
    ...
    ELSE 结果N
END

例如,根据商品名称查询价格:

SELECT
    CASE 商品名称
        WHEN '%手机%' THEN '999元'
        WHEN '%电脑%' THEN '4999元'
        WHEN '%电视机%' THEN '2999元'
        ELSE '价格不详'
    END AS 价格
FROM 商品表;

case...when...then...end的应用

case...when...then...end语句可应用于各种场景:

  • 查询:根据条件查询数据。
  • 更新:根据条件更新数据。
  • 删除:根据条件删除数据。

例如,根据成绩更新学生等级:

UPDATE 学生成绩表
SET 等级 = CASE 成绩
    WHEN 90~100 THEN 'A'
    WHEN 80~89 THEN 'B'
    WHEN 70~79 THEN 'C'
    WHEN 60~69 THEN 'D'
    ELSE 'F'
END;

case...when...then...end的优势

  • 提高代码可读性: 将复杂的条件拆分为多个清晰的case语句,增强代码可读性。
  • 简化代码: 消除冗长的if-else语句,简化代码结构。
  • 提升性能: MySQL优化器可以更有效地处理case语句,提高查询性能。

常见问题解答

1. case语句中可以使用哪些数据类型?
可以是任何MySQL支持的数据类型,包括字符串、数字、日期和时间。

2. case语句可以嵌套吗?
是的,可以嵌套case语句来处理更复杂的条件。

3. case语句的ELSE子句是否必填?
否,ELSE子句不是必需的,但如果没有,则将返回NULL值。

4. case语句可以返回多个值吗?
否,case语句每次只能返回一个值。

5. 如何使用case语句更新多个字段?
可以使用多个CASE表达式,每个CASE表达式负责更新一个字段。