mysql case 语句
在使用 MySQL 数据库查询语言时,经常会遇到需要根据不同的条件执行不同的操作的情况。为了实现这样的需求,MySQL 提供了 case 语句。case 语句可以根据特定的条件去执行不同的语句块,以达到分支控制的目的。本文将详细介绍 MySQL 中的 case 语句用法。
什么是 case 语句
case 语句是一种条件语句,通过判断条件的结果,执行相应的代码块。它可以有两种形式:简单 case 和搜索 case。
- 简单 case:根据某个表达式的值进行判断,执行相应的代码块。
- 搜索 case:根据一系列条件进行判断,执行相应的代码块。
简单 case
简单 case 是最基本的 case 语句形式。它根据某个表达式的值进行判断,执行相应的代码块。下面是一个简单的示例,假设我们有一个学生成绩表,根据不同的成绩等级输出对应的评语。
SELECT name,
CASE grade
WHEN 'A' THEN '优秀'
WHEN 'B' THEN '良好'
WHEN 'C' THEN '及格'
WHEN 'D' THEN '不及格'
ELSE '未知'
END AS comment
FROM scores;
在上面的示例中,我们使用了 case 语句根据 grade 值的不同,输出不同的评语。当 grade 为 A 时,输出 “优秀”;当 grade 为 B 时,输出 “良好”;以此类推。
搜索 case
搜索 case 是一种更灵活的 case 语句形式。它根据一系列条件进行判断,执行相应的代码块。下面是一个示例,假设我们有一个商品表,根据商品价格输出对应的折扣等级。
SELECT name, price,
CASE
WHEN price >= 1000 THEN '超值'
WHEN price >= 500 THEN '优惠'
WHEN price >= 100 THEN '折扣'
ELSE '其他'
END AS discount
FROM products;
在上面的示例中,我们使用了搜索 case 语句根据商品价格的不同,输出不同的折扣等级。当 price 大于等于 1000 时,输出 “超值”;当 price 大于等于 500 时,输出 “优惠”;以此类推。
case 语句的嵌套
case 语句也可以进行嵌套使用,一种常见的应用场景就是多条件判断。下面是一个示例,根据学生的分数判断其级别。
SELECT name, score,
CASE
WHEN score >= 90 THEN '优秀'
WHEN score >= 80 THEN '良好'
WHEN score >= 70 THEN '中等'
WHEN score >= 60 THEN '及格'
ELSE
CASE
WHEN score >= 0 THEN '不及格'
ELSE '未知'
END
END AS level
FROM students;
在上面的示例中,我们使用了嵌套的 case 语句根据学生的分数判断其级别。当 score 大于等于 90 时,输出 “优秀”;当 score 大于等于 80 时,输出 “良好”;以此类推。另外,如果分数小于 0,输出 “未知”。
case 语句的使用技巧
case 语句中使用条件运算符
在 case 语句中可以使用条件运算符,进一步简化代码。下面是一个示例,根据学生的分数判断其级别,并输出是否及格。
SELECT name, score,
CASE
WHEN score >= 60 THEN '及格'
ELSE '不及格'
END AS level,
CASE
WHEN score >= 60 THEN '是'
ELSE '否'
END AS pass
FROM students;
在上面的示例中,我们使用了条件运算符将两个判断合并到了一个 case 语句中。当 score 大于等于 60 时,输出 “及格” 并且 pass 为 “是”,否则输出 “不及格” 并且 pass 为 “否”。
case 语句中使用函数
在 case 语句中还可以使用函数,进一步扩展其用法。下面是一个示例,根据学生的分数判断其级别,并输出等级得分和及格分数。
SELECT name, score,
CASE
WHEN score >= 90 THEN CONCAT('优秀,得分:', score)
WHEN score >= 60 THEN CONCAT('及格,得分:', score)
ELSE CONCAT('不及格,得分:', score)
END AS level,
CASE
WHEN score >= 60 THEN CONCAT('及格,及格分数:', 60)
ELSE CONCAT('不及格,及格分数:', 60)
END AS pass_score
FROM students;
在上面的示例中,我们使用了 CONCAT 函数将字符串与分数进行拼接,输出级别和及格分数。
总结
通过本文的介绍,我们了解了 MySQL 中 case 语句的用法。它是一种能够根据不同的条件执行不同操作的条件语句。我们可以根据需要选择简单 case 或者搜索 case,甚至进行多次嵌套,使用条件运算符和函数来实现更复杂的判断和输出。掌握了 case 语句的用法,可以更灵活地进行数据库查询和分支控制。