MySQL CASE表达式
在MySQL中,CASE
表达式是一种强大的工具,用于在查询中进行条件判断和数据转换。它类似于编程语言中的if-else
语句,允许你根据不同的条件返回不同的值。CASE
表达式可以用于SELECT
、UPDATE
、DELETE
等语句中,帮助你更灵活地处理数据。
基本语法
CASE
表达式有两种形式:简单CASE
表达式和搜索CASE
表达式。
简单CASE表达式
简单CASE
表达式的语法如下:
sql
CASE expression
WHEN value1 THEN result1
WHEN value2 THEN result2
...
ELSE resultN
END
expression
:要评估的表达式或列。WHEN value THEN result
:当expression
等于value
时,返回result
。ELSE resultN
:如果没有任何WHEN
条件匹配,则返回resultN
。
搜索CASE表达式
搜索CASE
表达式的语法如下:
sql
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE resultN
END
WHEN condition THEN result
:当condition
为真时,返回result
。ELSE resultN
:如果没有任何WHEN
条件为真,则返回resultN
。
代码示例
示例1:简单CASE表达式
假设我们有一个students
表,其中包含学生的成绩。我们想根据成绩给学生打分:
sql
SELECT
name,
score,
CASE score
WHEN 90 THEN 'A'
WHEN 80 THEN 'B'
WHEN 70 THEN 'C'
ELSE 'D'
END AS grade
FROM students;
输入:
name | score |
---|---|
Alice | 95 |
Bob | 85 |
Carol | 75 |
Dave | 65 |
输出:
name | score | grade |
---|---|---|
Alice | 95 | D |
Bob | 85 | B |
Carol | 75 | C |
Dave | 65 | D |
备注
注意:在这个例子中,score
为95的Alice没有得到'A',因为CASE
表达式只匹配精确的值。如果你需要范围匹配,应该使用搜索CASE
表达式。
示例2:搜索CASE表达式
现在,我们使用搜索CASE
表达式来实现范围匹配:
sql
SELECT
name,
score,
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
WHEN score >= 70 THEN 'C'
ELSE 'D'
END AS grade
FROM students;
输入:
name | score |
---|---|
Alice | 95 |
Bob | 85 |
Carol | 75 |
Dave | 65 |
输出:
name | score | grade |
---|---|---|
Alice | 95 | A |
Bob | 85 | B |
Carol | 75 | C |
Dave | 65 | D |
提示
提示:搜索CASE
表达式更加灵活,可以处理复杂的条件判断。
实际应用场景
场景1:数据分类
假设你有一个orders
表,其中包含订单金额。你想根据订单金额将订单分类为“小订单”、“中订单”和“大订单”:
sql
SELECT
order_id,
amount,
CASE
WHEN amount < 100 THEN '小订单'
WHEN amount BETWEEN 100 AND 500 THEN '中订单'
ELSE '大订单'
END AS order_type
FROM orders;
场景2:动态列值
假设你有一个employees
表,其中包含员工的工资和奖金。你想计算每个员工的总收入,并根据总收入给员工评级:
sql
SELECT
employee_id,
salary,
bonus,
salary + bonus AS total_income,
CASE
WHEN salary + bonus > 100000 THEN '高收入'
WHEN salary + bonus BETWEEN 50000 AND 100000 THEN '中等收入'
ELSE '低收入'
END AS income_level
FROM employees;
总结
CASE
表达式是MySQL中非常有用的工具,可以帮助你在查询中进行条件判断和数据转换。通过简单CASE
表达式和搜索CASE
表达式,你可以根据不同的条件返回不同的值,从而实现更灵活的数据处理。
警告
注意:在使用CASE
表达式时,确保条件的顺序正确,因为MySQL会按顺序评估条件,一旦找到匹配的条件,就会返回相应的结果。
附加资源与练习
- 练习1:在
students
表中,添加一列attendance
(出勤率),并使用CASE
表达式将出勤率分为“优秀”、“良好”、“及格”和“不及格”。 - 练习2:在
orders
表中,添加一列order_date
,并使用CASE
表达式将订单分为“新订单”(最近30天内)和“旧订单”(超过30天)。
通过练习,你可以更好地掌握CASE
表达式的使用,并在实际项目中灵活应用。