MySQL CASE 语句实现多重条件判断

  除了 IF 函数,MySQL 还提供了一个替代的条件语句 CASE。 MySQL CASE 语句使代码更加可读和高效。
  CASE 语句有两种形式:简单 CASE 语句和可搜索的 CASE 语句。

一、简单 CASE 语句

  简单 CASE 语句是指使用简单 CASE 语句来检查表达式的值与一组唯一值的匹配,其语法如下所示。

CASE <表达式>
  WHEN <值1> THEN <操作>
  WHEN <值2> THEN <操作>
   …
  ELSE <操作>
END

  其中,<表达式> 可以是任何有效的表达式。我们将 <表达式> 的值与每个 WHEN 子句中的值进行比较,例如 <值1>,<值2> 等,如果 <表达式> 和 <值n> 的值相等,则执行相应的 WHEN 分支中的命令 <操作>。如果 WHEN 子句中的 <值n> 没有与 <表达式> 的值匹配,则 ELSE 子句中的命令将被执行。

  例如,数据库中有张表 tbl_test_campus,其建表语句如下所示。

CREATE TABLE `tbl_test_campus` (
  `campus_id` char(16) NOT NULL DEFAULT '' COMMENT '校园ID',
  `campus_tp` char(1) NOT NULL DEFAULT '' COMMENT '校园类别(0:大学;1:中小幼)',
  PRIMARY KEY (`campus_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

  用简单 CASE 语句将 campus_tp 转化为具体含义,SQL 语句则为:

mysql> SELECT campus_tp, CASE campus_tp WHEN "0" THEN "大学" WHEN "1" THEN "中小幼" ELSE "" END AS "校园类别" FROM tbl_test_campus;
+-----------+--------------+
| campus_tp | 校园类别     |
+-----------+--------------+
| 0         | 大学         |
| 0         | 大学         |
| 1         | 中小幼       |
|           |              |
+-----------+--------------+
4 rows in set (0.00 sec)

二、可搜索的 CASE 语句

  简单 CASE 语句仅允许将表达式的值与一组不同的值进行匹配。 为了执行更复杂的匹配,如范围,则可以使用可搜索 CASE 语句。 可搜索 CASE 语句等同于 IF 语句,但是它的构造更加可读,其语法如下所示。

CASE
  WHEN <条件1> THEN <命令>
  WHEN <条件2> THEN <命令>
   …
   ELSE <命令>
END

  MySQL 分别计算 WHEN 子句中的每个条件,直到找到一个值为 TRUE 的条件,然后执行 THEN 子句中的 <命令>。如果没有一个条件为 TRUE,则执行 ELSE 子句中的 <命令>。

  用可搜索的 CASE 语句将上表中的 campus_tp 转化为具体含义,SQL 语句如下所示。

mysql> SELECT campus_tp, CASE WHEN campus_tp = "0" THEN "大学" WHEN campus_tp = "1" THEN "中小幼" ELSE "" END AS "校园类别" FROM tbl_test_campus;
+-----------+--------------+
| campus_tp | 校园类别     |
+-----------+--------------+
| 0         | 大学         |
| 0         | 大学         |
| 1         | 中小幼       |
|           |              |
+-----------+--------------+
4 rows in set (0.00 sec)

  此例跟上例的返回结果一样,只是使用了 CASE 函数的不同写法,WHEN 后面为表达式,当表达式的结果为 TRUE 时,取 THEN 后面的值,如果都不是,则返回 ELSE 后面的值。

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值