27、CASE 表达式

1、CASE 表达式

是 SQL 标准中用于实现条件逻辑(类似 if-elseswitch)的功能。

它可以在 SELECTWHEREORDER BYGROUP BY 甚至 UPDATE/INSERT 中使用,是编写灵活查询的关键工具。

形式1:简单 CASE 表达式

语法:

CASE expression
    WHEN value1 THEN result1
    WHEN value2 THEN result2
    ...
    ELSE default_result
END

执行逻辑:逐值比较:将 expression 与每个 WHEN 后面的 value 进行相等比较,

  • 如果 expression 与 WHEN 子句中相应的表达式匹配(相等),CASE 语句将返回对应的 result
  • 如果 expression 与 WHEN 子句中的任何表达式都不匹配它将返回 ELSE 子句中的 default_result
  • ELSE 子句是可选的。如果您省略 ELSE 子句,并且表达式与 WHEN 子句中的任何表达式都不匹配,则 CASE 表达式将返回 NULL

形式2:搜索 CASE 表达式

语法:

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

执行逻辑:CASE 表达式从上到下评估每个 WHEN 子句中的布尔表达式。

  • 如果表达式为 true,则搜索 CASE 语句返回相应 THEN 子句中的结果
  • 如果表达式的计算结果都为 false,则 CASE 表达式返回 ELSE 子句中的 default_result
  • ELSE 子句是可选的。如果省略它并且没有布尔表达式的计算结果为 true则 CASE 表达式返回 NULL

如:表 employees

idnamedept_idsalarystatus
1 Alice 1 95000 active
2 Bob 2 45000 inactive
3 Carol 1 110000 active
4 Dave 3 NULL active

简单 CASE(Simple CASE),将部门 ID 转为部门名称

SELECT 
    name,
    dept_id,
    CASE dept_id
        WHEN 1 THEN 'Human Resources'
        WHEN 2 THEN 'Engineering'
        WHEN 3 THEN 'Sales'
        ELSE 'Unknown Department'
    END AS department_name
FROM employees;

结果:

namedept_iddepartment_name
Alice 1 Human Resources
Bob 2 Engineering
Carol 1 Human Resources
Dave 3 Sales

搜索 CASE(Searched CASE),根据薪资划分等级(范围判断)

SELECT 
    name,
    salary,
    CASE
        WHEN salary >= 100000 THEN 'High'
        WHEN salary >= 50000 THEN 'Medium'
        WHEN salary IS NULL THEN 'Not Set'
        ELSE 'Low'
    END AS salary_level
FROM employees;

结果:

namesalarysalary_level
Alice 95000 Medium
Bob 45000 Low
Carol 110000 High
Dave NULL Not Set

结合多列条件(复合判断)

SELECT 
    name,
    status,
    salary,
    CASE
        WHEN status = 'inactive' THEN 'Inactive Employee'
        WHEN salary > 100000 AND dept_id = 1 THEN 'HR Executive'
        WHEN salary > 80000 THEN 'Senior Staff'
        ELSE 'Regular Staff'
    END AS employee_category
FROM employees;

 结果:

namestatussalaryemployee_category
Alice active 95000 Senior Staff
Bob inactive 45000 Inactive Employee
Carol active 110000 HR Executive
Dave active NULL Regular Staff
posted @ 2025-11-20 10:57  chao_xiong  阅读(6)  评论(0)    收藏  举报