SQL中的Case用法

SQL中的Case用法
最新回答
故事很多慢慢来

2026-10-24 12:49:35

SQL中的CASE表达式是一种条件判断结构,允许在查询中实现类似编程语言的if-then-else逻辑。它分为两种主要形式:简单CASE表达式和搜索式CASE表达式,以下是详细说明及示例解析:

1. 简单CASE表达式

语法:

CASE case_operand WHEN when_operand1 THEN result1 WHEN when_operand2 THEN result2 ... ELSE default_result END

特点:

  • 将case_operand与每个WHEN后的when_operand进行直接比较(使用=运算符)。
  • 适用于固定值的等值判断。

示例1(用户问题中的第一个例子):

SELECT cust_last_name, CASE credit_limit WHEN 100 THEN 'Low' WHEN 5000 THEN 'High' ELSE 'Medium' END AS credit_categoryFROM customers;

解释:

  • 检查credit_limit的值:若为100返回'Low',为5000返回'High',否则返回'Medium'。
  • 结果列命名为credit_category。
2. 搜索式CASE表达式

语法:

CASE WHEN boolean_expression1 THEN result1 WHEN boolean_expression2 THEN result2 ... ELSE default_result END

特点:

  • 每个WHEN后接一个布尔条件,支持复杂逻辑(如比较、函数调用等)。
  • 更灵活,适用于范围判断或多条件组合。

示例2(用户问题中的第二个例子):

SELECT AVG( CASE WHEN e.salary > 2000 THEN e.salary ELSE 2000 END ) AS "Average Salary" FROM employees e;

解释:

  • 若员工薪资>2000,取实际值;否则替换为2000。
  • 计算调整后的薪资平均值,避免低薪拉低整体结果。
关键注意事项
  1. 执行顺序:

    CASE会按顺序评估条件,第一个满足的WHEN分支会被执行,后续分支忽略。

    示例:若credit_limit为100,不会检查5000的分支。

  2. ELSE子句:

    可选,但建议始终包含以处理未匹配的情况(默认返回NULL)。

  3. 数据类型一致性:

    所有THEN和ELSE的结果应为相同或兼容的数据类型,否则可能报错。

  4. 性能影响:

    复杂条件可能影响查询优化,尤其在大数据量时需谨慎使用。

扩展用法
  • 标签(Label):如<<label_name>>所示,可为CASE块命名,便于嵌套时引用(较少使用)。
  • 在UPDATE/INSERT中使用:UPDATE productsSET discount = CASE WHEN price > 100 THEN 0.1 ELSE 0.05 END;
总结
  • 简单CASE:适合固定值的等值匹配(如枚举转换)。
  • 搜索式CASE:适合范围、逻辑表达式或多条件判断。
  • 通过合理使用CASE,可实现动态数据分类、条件聚合等复杂逻辑,增强SQL的灵活性。