在 MySQL 数据库中,`CASE WHEN` 是一种非常实用的条件判断语句,用于在查询过程中根据不同的条件返回不同的值或执行不同的操作。它类似于编程语言中的 `if-else` 语句,但更适合在 SQL 查询中使用。
语法结构
`CASE WHEN` 的基本语法如下:
```sql
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE resultN
END
```
- condition 是布尔表达式,当其为真时,返回对应的 `result`。
- ELSE 子句是可选的,用于处理所有未匹配条件的情况。
- 返回的结果可以是任何数据类型。
示例应用场景
假设我们有一个员工表 `employees`,其中包含以下字段:
- `id`: 员工编号
- `name`: 员工姓名
- `salary`: 员工薪资
- `department`: 所属部门
我们需要根据员工的薪资水平来划分员工的等级,例如:
- 薪资低于 5000 的员工为“初级”;
- 薪资在 5000 到 10000 之间的员工为“中级”;
- 薪资高于 10000 的员工为“高级”。
可以使用 `CASE WHEN` 来实现这一需求:
```sql
SELECT
id,
name,
salary,
CASE
WHEN salary < 5000 THEN '初级'
WHEN salary BETWEEN 5000 AND 10000 THEN '中级'
ELSE '高级'
END AS level
FROM employees;
```
输出结果示例
| id| name | salary | level|
|------|----------|--------|--------|
| 1| 张三 | 4500 | 初级 |
| 2| 李四 | 7500 | 中级 |
| 3| 王五 | 12000| 高级 |
结合聚合函数使用
`CASE WHEN` 还可以与聚合函数结合使用,例如统计不同薪资等级的员工人数。
```sql
SELECT
COUNT(CASE WHEN salary < 5000 THEN 1 END) AS 初级人数,
COUNT(CASE WHEN salary BETWEEN 5000 AND 10000 THEN 1 END) AS 中级人数,
COUNT(CASE WHEN salary > 10000 THEN 1 END) AS 高级人数
FROM employees;
```
注意事项
1. ELSE 子句的重要性:如果没有 `ELSE` 子句,而所有条件都不满足时,会返回 `NULL`。
2. 性能优化:尽量减少复杂的条件判断,避免影响查询效率。
3. 嵌套使用:`CASE WHEN` 可以嵌套使用,但应谨慎设计逻辑,以免导致代码难以维护。
通过以上介绍,我们可以看到 `CASE WHEN` 在 MySQL 中的应用非常广泛,无论是简单的条件判断还是复杂的业务逻辑处理,都能发挥重要作用。掌握好它的用法,将大大提升你的 SQL 编写能力!