mysql 中case

mysql 中case

在 MySQL 中,CASE 语句是一种条件控制结构,它允许你在查询中根据特定条件返回不同的结果。CASE 语句类似于编程语言中的 if-else 结构,非常适合在 SQL 查询中进行复杂的条件判断和数据处理。

基本语法

MySQL 中的 CASE 语句有两种形式:简单 CASE 表达式和搜索 CASE 表达式。

简单 CASE 表达式

CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 ... ELSE default_result END
  • expression:要评估的表达式。
  • valueN:与 expression 进行比较的值。
  • resultN:当 expression = valueN 时返回的结果。
  • default_result:(可选)如果所有 WHEN 条件都不满足时返回的默认结果。

搜索 CASE 表达式

CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE default_result END
  • conditionN:布尔表达式(条件)。
  • resultN:当 conditionN 为真时返回的结果。
  • default_result:(可选)如果所有 WHEN 条件都不满足时返回的默认结果。

使用示例

假设你有一个名为 employees 的表,包含以下列:employee_id, first_name, last_name, 和 salary。你想根据员工的薪水等级给他们分配一个薪资级别(如 "Low", "Medium", "High")。

使用简单 CASE 表达式(通常不常见,因为需要固定值匹配)

-- 注意:简单 CASE 通常用于单个值的匹配,这里仅作为示例展示 SELECT employee_id, first_name, last_name, salary, CASE salary WHEN 3000 THEN 'Low' WHEN 5000 THEN 'Medium' WHEN 7000 THEN 'High' ELSE 'Unknown' END AS salary_grade FROM employees;

使用搜索 CASE 表达式(更常用)

SELECT employee_id, first_name, last_name, salary, CASE WHEN salary < 4000 THEN 'Low' WHEN salary BETWEEN 4000 AND 6000 THEN 'Medium' WHEN salary > 6000 THEN 'High' ELSE 'Unknown' END AS salary_grade FROM employees;

在这个例子中,我们使用了搜索 CASE 表达式来根据员工的薪水范围分配薪资级别。

在 UPDATE 和 DELETE 操作中使用 CASE

你也可以在 UPDATE 和 DELETE 语句中使用 CASE 来实现条件更新或删除。

条件更新

UPDATE employees SET salary = CASE WHEN salary < 4000 THEN salary * 1.1 WHEN salary BETWEEN 4000 AND 6000 THEN salary * 1.05 WHEN salary > 6000 THEN salary * 1.02 ELSE salary END;

条件删除

DELETE FROM employees WHERE CASE WHEN salary < 3000 THEN department_id = 1 WHEN salary > 7000 THEN department_id = 5 ELSE FALSE END;

注意:在 DELETE 语句中使用 CASE 可能不如直接使用多个 OR 条件直观,因此在实际应用中应谨慎使用。

总结

CASE 语句是 MySQL 中一个非常强大的工具,可以帮助你在查询中实现复杂的逻辑判断和数据转换。通过合理使用 CASE 语句,你可以使你的 SQL 代码更加灵活和高效。