
在 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 代码更加灵活和高效。
