mysql中CASE WHEN语句如何书写_mysql CASE WHEN使用方法

来源:这里教程网 时间:2026-02-28 20:27:34 作者:

在MySQL中,CASE WHEN语句用于实现条件判断,类似于编程语言中的if-else逻辑。它可以在SELECT、UPDATE、WHERE等语句中使用,帮助根据不同的条件返回不同的值。

基本语法结构

MySQL中CASE WHEN有两种写法:

1. 简单CASE表达式(类比switch-case)

CASE value
    WHEN value1 THEN result1
    WHEN value2 THEN result2
    ELSE result
END

2. 搜索型CASE表达式(支持复杂条件)

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ELSE result
END

其中,ELSE是可选的,如果没有匹配项且未指定ELSE,则返回NULL。

在SELECT中使用示例

假设有一张学生表 students,包含字段 score,我们想根据分数划分等级:

SELECT 
    name,
    score,
    CASE 
        WHEN score >= 90 THEN '优秀'
        WHEN score >= 80 THEN '良好'
        WHEN score >= 60 THEN '及格'
        ELSE '不及格'
    END AS grade
FROM students;

这条语句会为每个学生计算出对应的等级。

在ORDER BY中配合使用

有时需要按自定义顺序排序。例如,想按“优秀 > 良好 > 及格 > 不及格”的顺序显示数据:

SELECT 
    name, 
    score,
    CASE 
        WHEN score >= 90 THEN '优秀'
        WHEN score >= 80 THEN '良好'
        WHEN score >= 60 THEN '及格'
        ELSE '不及格'
    END AS grade
FROM students
ORDER BY 
    CASE 
        WHEN score >= 90 THEN 1
        WHEN score >= 80 THEN 2
        WHEN score >= 60 THEN 3
        ELSE 4
    END;

在UPDATE语句中使用

可以根据条件批量更新数据。例如,将成绩等级写入新字段:

UPDATE students SET level = 
CASE 
    WHEN score >= 90 THEN 'A'
    WHEN score >= 80 THEN 'B'
    WHEN score >= 70 THEN 'C'
    ELSE 'D'
END;

注意事项

CASE WHEN 是按顺序执行的,一旦满足某个条件就停止后续判断。因此条件的排列顺序很重要。

比如下面这个例子会有问题:

CASE 
    WHEN score > 0 THEN '正数'
    WHEN score > 50 THEN '高分'  -- 永远不会被执行
    ELSE '零或负数'
END

因为大于50的数也大于0,所以第二个条件无法命中。应调整顺序:

CASE 
    WHEN score > 50 THEN '高分'
    WHEN score > 0 THEN '正数'
    ELSE '零或负数'
END

基本上就这些。CASE WHEN语句灵活实用,掌握后能显著提升SQL的表达能力。不复杂但容易忽略细节。

相关推荐

热文推荐