MySQL CASE语句

在MySQL中,CASE语句是一种逻辑表达式,用于根据给定的条件执行不同的操作。它类似于编程语言中的switch语句,可以根据条件选择不同的结果。
CASE语句语法
在MySQL中,CASE语句有两种格式:简单CASE表达式和搜索CASE表达式。
简单CASE表达式:
CASE value
WHEN compare_value1 THEN result1
WHEN compare_value2 THEN result2
...
ELSE result
END
在简单CASE表达式中,将value与各个compare_value进行比较,如果找到匹配的值,则返回对应的result。如果没有找到匹配的值,则返回ELSE后的结果,如果没有ELSE,则返回NULL。
搜索CASE表达式:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE result
END
在搜索CASE表达式中,根据条件进行匹配,满足条件时返回对应的结果。如果没有满足的条件,则返回ELSE后的结果,如果没有ELSE,则返回NULL。
CASE语句示例
下面通过示例来详细说明如何在MySQL中使用CASE语句。
示例数据准备
假设我们有一个学生成绩表grades,包含学生的姓名、科目和成绩。我们需要根据不同的成绩等级进行分类,可以使用CASE语句来实现。
首先创建grades表并插入数据:
CREATE TABLE grades (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
subject VARCHAR(50),
score INT
);
INSERT INTO grades (name, subject, score) VALUES
('Alice', 'Math', 90),
('Bob', 'Math', 75),
('Charlie', 'Science', 85),
('David', 'Science', 60);
使用简单CASE表达式
在这个示例中,我们将根据学生的成绩对他们进行分类,具体分为A、B、C和D四个等级。
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 grades;
运行上述SQL查询语句后,将得到如下结果:
+---------+-------+-------+
| name | score | grade |
+---------+-------+-------+
| Alice | 90 | A |
| Bob | 75 | C |
| Charlie | 85 | B |
| David | 60 | D |
+---------+-------+-------+
使用搜索CASE表达式
接下来,我们将示例稍微变换,根据不同科目的成绩进行分类。
SELECT
name,
subject,
CASE
WHEN subject = 'Math' THEN
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
WHEN score >= 70 THEN 'C'
ELSE 'D'
END
WHEN subject = 'Science' THEN
CASE
WHEN score >= 85 THEN 'A'
WHEN score >= 70 THEN 'B'
ELSE 'C'
END
ELSE 'Unknown'
END AS grade
FROM grades;
运行上述SQL查询语句后,将得到如下结果:
+---------+---------+-------+
| name | subject | grade |
+---------+---------+-------+
| Alice | Math | A |
| Bob | Math | C |
| Charlie | Science | A |
| David | Science | C |
+---------+---------+-------+
总结
通过上述示例,我们了解了在MySQL中如何使用CASE语句根据不同的条件进行分类和操作。CASE语句是一个非常灵活和强大的工具,可以帮助我们更好地处理复杂的逻辑场景。
极客教程