← 返回首页

IF() 函数和 CASE WHEN 用法

2026-05-14

mysql #sql

一、IF() 函数

IF() 是一个简单的条件判断函数,用于根据条件返回不同的值。 语法:

IF(condition, value_if_true, value_if_false)

参数说明: - condition:条件表达式(返回 TRUE/FALSE)。 - value_if_true:条件为 TRUE 时返回的值。 - value_if_false:条件为 FALSE 时返回的值。 示例:

-- 判断成绩是否及格
SELECT 
    student_name, 
    score,
    IF(score >= 60, 'Pass', 'Fail') AS result
FROM students;
嵌套 IF 函数(多条件判断):


SELECT 
    product_name,
    stock,
    IF(stock > 50, '充足',
        IF(stock > 10, '一般', '缺货')
    ) AS stock_status
FROM products;

二、CASE WHEN 语句

CASE WHEN 是一种更灵活的条件判断语句,适合处理多条件分支。 语法:

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    ELSE default_result
END

参数说明: - condition1, condition2, ...:条件表达式。 - result1, result2, ...:条件为 TRUE 时返回的值。 - default_result:所有条件都不满足时返回的默认值。 示例:

-- 根据成绩划分等级
SELECT 
    student_name, 
    score,
    CASE
        WHEN score >= 90 THEN 'A'
        WHEN score >= 80 THEN 'B'
        WHEN score >= 70 THEN 'C'
        WHEN score >= 60 THEN 'D'
        ELSE 'F'
    END AS grade
FROM students;

示例:

-- 根据课程类型返回描述
SELECT 
    course_name,
    CASE course_type
        WHEN 'math' THEN 'Mathematics'
        WHEN 'science' THEN 'Science'
        WHEN 'history' THEN 'History'
        ELSE 'Other'
    END AS course_description
FROM courses;

三、IF() 与 CASE WHEN 的区别

| 特性 | IF() 函数 | CASE WHEN 语句 | | ----------- | --------------------- | ---------------- | | ​适用场景​ | 简单的二选一条件判断 | 多条件分支判断 | | ​语法复杂度​ | 简单 | 复杂 | | ​嵌套支持​ | 支持嵌套,但可读性差 | 支持多分支,可读性好 | | ​默认值​ | 必须指定 value_if_false | 可通过 ELSE 指定默认值 | | ​性能​ | 适合简单条件判断,性能较好 | 适合复杂条件判断,性能稍差 | | | | |

四、使用场景建议

  1. IF() 函数 :
    • 适合简单的二选一条件判断。
    • 例如:判断是否及格、返回布尔值等。
  2. ​ CASE WHEN 语句 :
    • 适合多条件分支判断。
    • 例如:根据成绩划分等级、根据类型返回描述等。

五、综合示例

-- 使用 IF() 和 CASE WHEN 结合
SELECT 
    student_name, 
    score,
    IF(score >= 60, 'Pass', 'Fail') AS pass_status,
    CASE
        WHEN score >= 90 THEN 'A'
        WHEN score >= 80 THEN 'B'
        WHEN score >= 70 THEN 'C'
        WHEN score >= 60 THEN 'D'
        ELSE 'F'
    END AS grade
FROM students;
pigchen.github.io