mysql case 语句

mysql case 语句

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 语句的用法,可以更灵活地进行数据库查询和分支控制。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程