MySQL CASE表达式简单使用

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: MySQL CASE表达式简单使用

MySQL CASE 表达式是控制流函数的一部分,它使我们能够将if-else 或 if-then-else逻辑写入查询。此表达式可用于任何使用有效程序或查询的地方,例如 SELECT、WHERE、ORDER BY 子句等。


CASE 表达式验证各种条件并在第一个条件为true时返回结果。一旦满足条件,它就会停止遍历并给出输出。如果它找不到任何条件为真,则执行else 块。当没有找到 else 块时,它返回一个NULL值。MySQL CASE 语句的主要目标是处理 SELECT 子句中的多个 IF 语句。


我们可以通过两种方式使用 CASE 语句,具体如下:


一、简单的CASE语句

第一种方法是取一个值并将其与给定的语句匹配,如下所示。


CASE value   
    WHEN [compare_value] THEN result   
    [WHEN [compare_value] THEN result ...]   
    [ELSE result]   
END  

当第一个compare_value比较为true时,它返回结果。否则,它将返回 else 子句。

示例

# 根据类别id,确定对应的主营类型
select
  (
    CASE category_id
      WHEN 35 THEN '生鲜果蔬'
      WHEN 36 THEN '休闲零食'
      WHEN 37 THEN '蛋糕烘焙'
      WHEN 38 THEN '茶饮酒水'
      WHEN 39 THEN '滋补保健'
      WHEN 40 THEN '粮油米面'
      WHEN 41 THEN '综合食品'
      WHEN 26 THEN '汽车养护'
      WHEN 31 THEN '充值缴费'
      ELSE ' '
    END
  ) as ’ 商 品 类 目 ‘
FROM
  shopxx.xx_platform;

二、检索CASE语句

第二种方法是在WHEN子句中考虑一个search_condition,如果找到,则在相应的 THEN 子句中返回结果。否则,它将返回 else 子句。如果没有指定 else 子句,它将返回一个 NULL 值。

CASE   
    WHEN [condition] THEN result   
    [WHEN [condition] THEN result ...]   
    [ELSE result]   
END  

示例

# 根据商品类型不同,描述信息存放的字段也不一样
SELECT id,id,goods,organize supplier_id,productType,is_list,is_marketable,
  (
    CASE
      WHEN productType = 9 OR productType = 11 THEN detail_image #虚拟商品
      ELSE product_desc # 实物商品
    END
  ) spu_describe
FROM
  xx_product
WHERE
  pfid = 20000
  AND del_state IS NULL;# 删除状态字段为NULL代表未删除


三、MySQL CASE表达式的返回类型

CASE 表达式根据使用它的上下文返回结果。例如:

  • 如果在字符串上下文中使用,则返回字符串结果。
  • 如果在数字上下文中使用,则返回整数、浮点数、十进制值。


四、 MySQL CASE表达式 版本支持

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


最后


虽然MySQL CASE语法可以帮我们方便的处理一些类似switch...case 这样的逻辑,但是在项目中,对于一些需要经常操作数据库的操作不建议这样做。复杂语法会消耗数据库的性能,C端接口一定要用缓存


最后推荐大家几款优秀的SQL格式化工具:


http://www.toolscat.com/format/sql


http://www.wetools.com/sql-formatter


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
9月前
MySQL8.0新特性之公用表表达式学习
公用表表达式(或通用表表达式)简称为CTE(Common Table Expressions)。CTE是一个命名的临时结果集,作用范围是当前语句。CTE可以理解成一个可以复用的子查询,当然跟子查询还是有点区别的,CTE可以引用其他CTE,但子查询不能引用其他子查询。所以,可以考虑代替子查询。
96 0
|
13天前
|
SQL 关系型数据库 MySQL
mysql 中 case when 的使用
mysql 中 case when 的使用
|
2月前
|
关系型数据库 MySQL
MySQL中CASE WHEN用法总结
MySQL中CASE WHEN用法总结
|
2月前
|
关系型数据库 MySQL
mysql动态查列(case when then else end)
mysql动态查列(case when then else end)
23 0
|
2月前
|
SQL 关系型数据库 MySQL
MySQL——case when语句测试
MySQL——case when语句测试
21 0
|
2月前
|
存储 关系型数据库 MySQL
MySQL数据库——存储过程-if条件判断、参数、case(介绍、用法、案例)
MySQL数据库——存储过程-if条件判断、参数、case(介绍、用法、案例)
56 0
|
关系型数据库 MySQL
MySQL实战基础知识入门(4):MySQL高级函数CASE WHEN END
MySQL实战基础知识入门(4):MySQL高级函数CASE WHEN END
88 0
|
3月前
|
存储 SQL 关系型数据库
MySQL存储过程 if、case、while、loop、游标、变量、条件处理程序
MySQL存储过程 if、case、while、loop、游标、变量、条件处理程序
87 0
|
3月前
|
SQL 关系型数据库 MySQL
MySQL知识汇总:MySQL函数CASE WHEN用法详解
MySQL知识汇总:MySQL函数CASE WHEN用法详解
|
9月前
第18章_MySQL8新特性之CTE(公用表表达式)
第18章_MySQL8新特性之CTE(公用表表达式)
58 0