从 01 开始 从 01 开始
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档
  • 计算机简史

  • 数字电路

  • 计算机组成原理

  • 操作系统

  • Linux

  • 计算机网络

  • 数据库

    • 教程概述
    • 数据的存储
    • 数据库的安装
    • 数据库的启停与连接
    • 数据库的管理
    • SQL 概述
    • 表的管理
    • SELECT 基础
    • 运算符
    • 聚合查询
    • 数据的排序
    • 数据的插入
    • 数据的删除
    • 数据的更新
    • 事务
    • 视图
    • 子查询
    • 函数
    • 谓词
    • CASE 表达式
      • 什么是 CASE​​ 表达式
      • ​CASE​​ 表达式的语法
      • ​CASE​​ 表达式的使用方法
      • CASE 简写
    • 集合运算
    • 联结查询-JOIN
    • SQL 入门小结
    • 更多数据库
    • MySQL 的数据类型
    • 命令行的一些用法
    • 用户与权限管理
    • MySQL 的权限管理
    • mysqldump
    • mysqladmin
    • Liquibase
    • 表注释与字段注释
    • 编码类型
  • 编程工具

  • 装机

  • 计算机基础
  • 数据库
2023-11-29
目录

CASE 表达式

# 180.CASE 表达式

​CASE​ 是 SQL 中数一数二的重要功能,希望大家能够在这里好好学习掌握。

‍ ‍

# 什么是 CASE​​ 表达式

​​CASE​​表达式 也是函数的一种,主要是用来判断和运算,在编程中通常称为 (条件)分支 。

case 可以理解为当... 就... 。比如:

  • 当下雨时,就大伞
  • 当出太阳,就不打伞
  • 当下冰雹,就不出门
  • ....... ‍

SQL 中的 CASE 和 编程语言中的 CASE 很类似 ‍

# ​CASE​​ 表达式的语法

语法:

CASE WHEN <求值表达式> THEN <表达式>
     WHEN <求值表达式> THEN <表达式>
     WHEN <求值表达式> THEN <表达式>
       .
       .
       .
     ELSE <表达式>
END
1
2
3
4
5
6
7
8

​​WHEN​​ **** 子句 中的“< 求值表达式 >”就是使用谓词编写出来的表达式,例如“列 =​ 值”,或使用 =​ 、!=​ LIKE​ 、BETWEEN​ 等谓词编写出来的

​CASE​ 表达式会从对最初的 WHEN​ 子句中的“< 求值表达式 >”进行求值,也就是计算出该表达式的真值是什么,计算出来后:

  • 如果结果为真(TRUE​ ),那么就返回 ​THEN​​子句 中的表达式,CASE​ 表达式的执行到此为止。
  • 如果结果不为真,那么就跳转到下一条 WHEN​ 子句的求值之中。
  • 如果直到最后的 WHEN​ 子句为止返回结果都不为真,那么就会返回 ​ELSE​​ 中的表达式,执行终止。

注意:CASE 表达式最终会返回一个值,无论写了多少行,最后也是只返回一个值。 ‍

# ​CASE​​ 表达式的使用方法

接下来就开始使用 case。来考虑这样一种情况,现在 Product​ 表中包含衣服、办公用品和厨房用具 3 种商品类型,我们想要在查询出数据后,在商品种类前添加几个字母代号:

A :衣服
B :办公用品
C :厨房用具
1
2
3

因为表中的记录并不包含“A​ :”或者“B​ :”这样的字符串,所以需要在 SQL 中进行添加,可以考虑使用字符串拼接符号(concat)。

然后就是怎么根据商品种类,拼接对应的字符“A​ :”“B​ :”“C​ 了,这时就可以使用 CASE​ 表达式来实现:

SELECT product_name,
       CASE WHEN product_type = '衣服' THEN concat('A: ', product_type)
            WHEN product_type = '办公用品' THEN concat('B: ', product_type)
            WHEN product_type = '厨房用具' THEN concat('C: ', product_type)
            ELSE NULL
       END AS abc_product_type
  FROM Product;

-- 结果:
+--------------+------------------+
| product_name | abc_product_type |
+--------------+------------------+
| T恤          | A: 衣服          |
| 打孔器       | B: 办公用品      |
| 运动T恤      | A: 衣服          |
| 菜刀         | C: 厨房用具      |
| 高压锅       | C: 厨房用具      |
| 叉子         | C: 厨房用具      |
| 擦菜板       | C: 厨房用具      |
| 圆珠笔       | B: 办公用品      |
+--------------+------------------+
8 rows in set (0.00 sec)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

‍ 注意:

  • 注意,每个分支返回的数据类型都得是一致的。
  • ELSE​​ 子句指定了应该如何处理不满足 WHEN​​ 子句中的条件的记录。 ​ELSE NULL​​​ 的意思是“如果出现上述情况之外的时候,返回 NULL​​ ”。除了 NULL​​,其他值或者表达式也都可以写在 ELSE​​ 子句之中
  • ​ELSE​​ 子句也可以省略不写,这时会被默认为 ELSE NULL​​ 。但为了可读性,还是建议写出
  • ​CASE​​ 表达式最后的“END​​ ”是不能省略的,忘写会发生语法错误 ‍

# CASE 简写

语法:

CASE <表达式>
    WHEN <表达式> THEN <表达式>
    WHEN <表达式> THEN <表达式>
    WHEN <表达式> THEN <表达式>
        .
        .
        .
    ELSE <表达式>
END

1
2
3
4
5
6
7
8
9
10

执行顺序说明:

  • 首先会计算 CASE 关键字之后的表达式的值
  • 然后从最初的 WHEN​ 子句开始进行,逐一计算 WHEN ​后面的表达式的值,看是否和第一步的值相同,是则返回 ​THEN​​子句 中的表达式,不是跳转到下一条 WHEN​ 子句的求值之中 ‍ 刚刚的 SQL 也可以简写为:
SELECT product_name,
       CASE product_type
            WHEN '衣服'      THEN concat('A: ', product_type)
            WHEN '办公用品'  THEN concat('B: ', product_type)
            WHEN '厨房用具'  THEN concat('C: ', product_type)
            ELSE NULL
        END AS abc_product_type
  FROM Product;
1
2
3
4
5
6
7
8

这样简化了书写,但如果想要在 WHEN​ 子句中指定不同列时,就无能为力了,得用之前的写法 ‍ (完)

上次更新: 2025/6/3 09:31:54
谓词
集合运算

← 谓词 集合运算→

最近更新
01
语雀文档一键下载至本地教程
07-04
02
要成功,就不要低估环境对你的影响
07-03
03
血泪教训:电子设备要定期开机
07-02
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式