MySQL CASE 表达式
MySQL CASE 表达式是控制流函数的一部分,它允许我们在查询中编写 if-else或if-then-else 逻辑。此表达式可以在使用有效程序或查询的任何地方使用,例如SELECT、WHERE、ORDER BY 子句等。
CASE 表达式验证各种条件,并在第一个条件为 真 时返回结果。一旦满足条件,它停止遍历并给出输出。如果找不到任何条件为真,则执行 else 块 。当找不到 else 块时,它返回一个 NULL 值。 MySQL CASE 语句的主要目标是处理 SELECT 子句中的多个 IF 语句。
我们可以使用 CASE 语句的两种方式,如下所示:
1. 简单 CASE 语句:
第一种方法是将一个值与给定语句匹配,如下所示。
语法
CASE value
WHEN [compare_value] THEN result
[WHEN [compare_value] THEN result ...]
[ELSE result]
END
它在第一个比较值为真时返回结果。否则,它将返回else子句。
示例
mysql> SELECT CASE 1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END;
输出
在上述命令成功执行后,我们将看到以下输出结果。
2. 搜索式CASE语句:
第二种方法是在 WHEN 子句中考虑一个 search_condition ,如果找到了,就返回对应的THEN子句中的结果。否则,它将返回else子句。如果未指定else子句,它将返回NULL值。
语法
CASE
WHEN [condition] THEN result
[WHEN [condition] THEN result ...]
[ELSE result]
END
示例
mysql> SELECT CASE BINARY 'B' WHEN 'a' THEN 1 WHEN 'b' THEN 2 END;
输出
返回类型
CASE表达式的返回结果取决于它使用的上下文。例如:
- 如果它在字符串上下文中使用,它返回字符串结果。
- 如果它在数值上下文中使用,它返回整数、浮点数、十进制值。
MySQL版本支持
CASE语句支持以下的 MySQL版本 :
- MySQL 8.0
- MySQL 5.7
- MySQL 5.6
- MySQL 5.5
- MySQL 5.1
- MySQL 5.0
- MySQL 4.1
- MySQL 4.0
- MySQL 3.23.3
让我们创建一个表’ students ‘并在该表上执行CASE语句。
在上述表中,我们可以看到 class列 包含学生系别的缩写形式。因此,我们将使用全称更改系别的缩写形式。现在,执行以下查询以进行此操作。
SELECT studentid, firstname,
CASE class
WHEN 'CS' THEN 'Computer Science'
WHEN 'EC' THEN 'Electronics and Communication'
ELSE 'Electrical Engineering'
END AS department from students;
执行上述查询成功后,我们将得到以下输出。在这里,我们可以看到 department 列中包含完整的形式,而不是缩写形式。