MySQL CASE表达式简单使用

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 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


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
MySQL8.0新特性之公用表表达式学习
公用表表达式(或通用表表达式)简称为CTE(Common Table Expressions)。CTE是一个命名的临时结果集,作用范围是当前语句。CTE可以理解成一个可以复用的子查询,当然跟子查询还是有点区别的,CTE可以引用其他CTE,但子查询不能引用其他子查询。所以,可以考虑代替子查询。
278 0
|
6月前
|
存储 关系型数据库 MySQL
利用Cron表达式实现MySQL数据库的定时备份
以上就是如何使用Cron表达式和mysqldump命令实现MySQL数据库的定时备份。这种方法的优点是简单易用,而且可以根据需要定制备份的时间和频率。但是,它也有一些限制,例如,它不能备份MySQL服务器的配置文件和用户账户信息,也不能实现增量备份。如果需要更复杂的备份策略,可能需要使用专门的备份工具或服务。
136 15
|
7月前
|
SQL 关系型数据库 MySQL
MySQL:CTE 通用表达式
CTE(通用表表达式)为处理复杂查询提供了强大的工具。通过普通CTE,可以简化查询逻辑,提高可读性;通过递归CTE,可以优雅地处理层级结构数据。掌握CTE的使用,对于提升SQL查询能力和优化数据库操作有着重要意义。希望本文能帮助你更好地理解和使用MySQL中的CTE,提高工作效率和代码质量。
244 7
|
11月前
|
存储 SQL NoSQL
|
12月前
|
安全 关系型数据库 MySQL
mysql8.0 正值表达式Regular expressions (sample database classicmodels _No.5)
本文介绍了MySQL8.0中的正值表达式及其相关函数,通过实例展示了如何使用正则表达式进行字符串匹配,并提出了关于执行效率的问题。
285 1
|
SQL 关系型数据库 MySQL
mysql 中 case when 的使用
mysql 中 case when 的使用
|
关系型数据库 MySQL
MySQL实战基础知识入门(4):MySQL高级函数CASE WHEN END
MySQL实战基础知识入门(4):MySQL高级函数CASE WHEN END
191 0
|
关系型数据库 MySQL
MySQL中CASE WHEN用法总结
MySQL中CASE WHEN用法总结
1274 0
|
关系型数据库 MySQL
mysql动态查列(case when then else end)
mysql动态查列(case when then else end)
148 0
|
SQL 关系型数据库 MySQL
MySQL——case when语句测试
MySQL——case when语句测试
155 0

推荐镜像

更多