MySQL case when【用法详解】

news/2024/9/19 4:47:59/ 标签: mysql, 数据库

MySQL case when【用法详解】

  • 语法
    • 1. 简单CASE表达式
    • 2. 搜索CASE表达式
  • 示例
    • 示例1:使用简单CASE表达式
    • 示例2:使用搜索CASE表达式
    • 示例3:在UPDATE语句中使用CASE
    • 示例4:在DELETE语句中使用CASE
    • 注意事项
  • 总结

在MySQL中,CASE语句是一种条件表达式,它允许你根据一系列的条件来返回不同的值。CASE语句在SQL查询中非常有用,特别是当你需要根据某个字段的多个可能值来返回不同的结果时。下面我们将详细探讨MySQL中CASE语句的语法和使用方法。

语法

MySQL中的CASE语句有两种形式:简单CASE表达式和搜索CASE表达式。

1. 简单CASE表达式

CASE expressionWHEN value1 THEN result1WHEN value2 THEN result2...ELSE result
END

在这个形式中,expression是要被评估的表达式,value1, value2, … 是可能的值,而 result1, result2, … 是当对应值匹配时返回的结果。如果所有的WHEN子句都不匹配,那么将返回ELSE子句中的result。如果没有ELSE子句,并且没有WHEN子句匹配,那么CASE表达式将返回NULL

2. 搜索CASE表达式

CASEWHEN condition1 THEN result1WHEN condition2 THEN result2...ELSE result
END

在搜索CASE表达式中,condition1, condition2, … 是要评估的条件,而 result1, result2, … 是当对应条件为真时返回的结果。与简单CASE表达式类似,如果没有任何WHEN子句的条件为真,并且存在ELSE子句,那么将返回ELSE子句中的result。否则,返回NULL

示例

示例1:使用简单CASE表达式

假设我们有一个名为employees的表,其中包含一个名为department的字段,表示员工的部门。我们想要根据部门字段的值返回不同的描述:

SELECT name,department,CASE departmentWHEN 'IT' THEN '信息技术部'WHEN 'HR' THEN '人力资源部'WHEN 'Sales' THEN '销售部'ELSE '其他部门'END AS department_description
FROM employees;

在这个查询中,我们根据department字段的值使用CASE表达式返回对应的中文描述。

示例2:使用搜索CASE表达式

考虑一个销售表sales_records,它有一个amount字段表示销售额。我们想要根据销售额的大小返回不同的评级:

SELECT sale_id,amount,CASEWHEN amount < 100 THEN '低销售额'WHEN amount BETWEEN 100 AND 500 THEN '中等销售额'WHEN amount > 500 THEN '高销售额'ELSE '未知'END AS sales_rating
FROM sales_records;

在这个查询中,我们使用搜索CASE表达式根据amount字段的值返回不同的销售额评级。

示例3:在UPDATE语句中使用CASE

假设我们想要根据员工的部门来更新他们的薪资。例如,我们想要给IT部门的员工加薪10%,给销售部的员工加薪5%,而其他部门的员工薪资保持不变。我们可以使用UPDATE语句结合CASE表达式来实现这一需求:

UPDATE employees
SET salary = CASE departmentWHEN 'IT' THEN salary * 1.10WHEN 'Sales' THEN salary * 1.05ELSE salary
END;

在这个示例中,我们根据department字段的值使用CASE表达式计算新的薪资,并通过UPDATE语句将结果更新到salary字段中。

示例4:在DELETE语句中使用CASE

虽然CASE语句在DELETE语句中的使用相对较少,但有时候我们可能需要根据某些条件来决定是否删除记录。例如,假设我们想要删除销售额低于100且部门不是IT的记录:

DELETE FROM sales_records
WHERE CASEWHEN amount < 100 AND department <> 'IT' THEN 1ELSE 0
END = 1;

这个查询的逻辑是,只有当amount小于100且department不是’IT’时,CASE表达式的结果才为1,此时DELETE语句才会执行删除操作。

注意事项

  • 性能考虑
    虽然CASE语句在MySQL中非常有用,但在某些情况下,过度使用或不当使用可能会对性能产生负面影响。特别是当CASE语句在大数据集上运行时,它可能会导致查询执行时间增加。因此,在设计查询时,应仔细评估是否真的需要使用CASE语句,并考虑其他可能的优化方法。

  • 可读性和维护性
    复杂的CASE语句可能会降低代码的可读性和维护性。为了确保代码易于理解和维护,建议将复杂的逻辑拆分成更小的部分,并使用有意义的变量名和注释来解释每个部分的功能。

总结

CASE语句是MySQL中功能强大的条件表达式工具,它可以在SELECT、UPDATE、DELETE等语句中灵活应用,帮助我们根据条件返回不同的值或执行不同的操作。通过合理使用CASE语句,我们可以构建出更加灵活和强大的SQL查询逻辑。然而,在使用CASE语句时,我们也需要注意性能、可读性和NULL处理等方面的问题,以确保代码的高效性和可维护性。


http://www.ppmy.cn/news/1520922.html

相关文章

【技术解析】工厂内部导航系统:高精度定位与智能路径规划的技术实现

一、工厂内部导航系统概述 工厂内部导航系统集成了最新的GPS室内定位技术、蓝牙定位技术&#xff0c;实现了对工厂内部环境的无缝覆盖与高精度定位。无论是繁忙的生产线、错综复杂的仓库还是广阔的厂区&#xff0c;都能轻松应对。 二、工厂内部导航系统核心功能 实时定位&…

深度学习的发展历程

深度学习的起源 在机器学习中&#xff0c;我们经常使用两种方式来表示特征&#xff1a;局部表示&#xff08;Local Representation&#xff09;和分布式表示&#xff08;Distributed Representation&#xff09;。以颜色表示为例&#xff0c;见下图&#xff1a; 要学习到一种好…

电信500M宽带+AX210无线网卡测速

500M电信宽带&#xff0c;PC的Wifi模块是AX210 一、PC测速 2.4G Wifi 5G Wifi 有线网口 二、 手机端&#xff0c;小翼管家App测速 2.4G Wifi 5G Wifi 结论&#xff1a; 手机上网要快的话&#xff0c;还是要选择5G wifi

使用实例:xxl-job应用在spring cloud微服务下

1、首先下载&#xff0c;从github上下载&#xff0c;选择zip然后直接解压 https://github.com/xuxueli/xxl-job/releases 2、解压完后用idea启动。 启动这个启动类&#xff0c;然后按照路径访问 http://localhost:8080/xxl-job-admin/ 3、在你的项目里编写一个单独的微服务&a…

目标跟踪算法——ByteTrack算法原理解析

文章目录 ByteTrack1. ByteTrack算法步骤&#xff1a;2. 算法解释2.1 模型初始化2.2 模型更新算法流程2.2.1 检测结果划分&#xff0c;划分为高分和较低分段2.2.2 高分段处理手段2.2.3 最优匹配与未匹配划分2.2.4 低分框再匹配2.2.5 未确认轨迹处理2.2.6 更新状态 2.3 匈牙利匹…

ffplay源码分析(五)包缓存队列和帧缓存队列

在音视频处理流程中&#xff0c;ffplay的有两种队列&#xff0c;包缓存队列&#xff08;Packet Buffer Queue&#xff09;和帧缓存队列&#xff08;Frame Buffer Queue&#xff09;。这两个队列的存在&#xff0c;是为了适应音视频数据处理过程中的多线程架构——包括收包线程、…

图像白平衡

目录 效果 背景 什么是白平衡&#xff1f; 实现原理 将指定图色调调整为参考图色调主要流程 示例代码 效果 将图一效果转换为图二效果色调&#xff1a; 调整后&#xff0c;可实现色调对换 背景 现有两张图像&#xff0c;色调不一致&#xff0c;对于模型重建会有影响。因…

RabbitMQ 02 操作,配置信息,用户权限

01.介绍启动&#xff0c;关闭 02.环境 2.1 MQ是用Erlang语言写的 2.2 一个RabbitMQ 节点 一个 Erlang节点一个Erlang 程序 &#xff08;RabbitMQ程序&#xff09; 2.3 Erlang节点&#xff1a; 这个是Erlang节点集群状态下&#xff1a; 2.4 启动节点 2.5 查看日志信息 …

2021年大厂Java面试题(基础+框架+系统架构+分布式+实战)

Java线程的状态 进程和线程的区别&#xff0c;进程间如何通讯&#xff0c;线程间如何通讯 HashMap的数据结构是什么&#xff1f;如何实现的。和HashTable&#xff0c;ConcurrentHashMap的区别 Cookie和Session的区别 索引有什么用&#xff1f;如何建索引&#xff1f; Arra…

Elasticsearch 中,term 查询和 match 查询的区别

文章目录 前言Elasticsearch 中&#xff0c;term 查询和 match 查询的区别1. Term 查询2. Match 查询3. 总结 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都…

各种各样的正则表达式

一、校验数字的表达式 数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^\d{m,n}$ 零和非零开头的数字:^(0|[1-9][0-9]*)$ 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$ 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$ 正…

【flask】python框架flask的hello world

创建一个py文件&#xff0c;写如下内容 # save this as app.py from flask import Flaskapp Flask(__name__)app.route("/") def hello():return "Hello, World!"如下图 在此py文件路径下启动cmd&#xff0c;输入 flask run结果如下图 在浏览器中访问…

【科普】数字化和数字化转型:是什么,为什么,怎么做?

​一、什么是数字化转型&#xff1f; 近年来 “数字化”、“数字化转型”概念已经渗透到各个行业&#xff0c;成为业界的热点议题。对于什么是“数字化转型”&#xff0c;众说纷纭。 有人说“数字化转型不过就是给传统的信息化穿上皇帝的新衣”&#xff0c;也有人说“数字化转…

策略优化:提升MySQL数据备份效率的实用指南

在当今数据驱动的商业环境中&#xff0c;数据备份策略的优化对于确保数据安全和业务连续性至关重要。MySQL作为广泛使用的数据库系统&#xff0c;其数据备份策略的优化不仅可以提高数据恢复的效率&#xff0c;还能降低存储成本和提高系统性能。本文将深入探讨如何在MySQL中实现…

用户管理和授权

授权 mysql> show databases; -------------------- | Database | -------------------- | information_schema | | day01db | | employees | | mysql | | mysql01 | | mysql02 | | performance_schema …

深入理解Java虚拟机的类加载机制

深入理解Java虚拟机的类加载机制 目录 深入理解Java虚拟机的类加载机制 一、类加载概念与过程 1. 类加载定义与作用 2. 类加载过程详解 二、类加载器 1. 系统提供的类加载器 2. 自定义类加载器 三、双亲委派模型 1. 双亲委派模型的概念 2. 工作过程 四、类的卸载与重…

【whisper】使用whisper实现语音转文字

whisper需要ffmpeg支持 官网下载ffmpeg https://www.gyan.dev/ffmpeg/builds/下载完毕后解压放到合适的位置 添加环境变量 在cmd中输入以下 ffmpeg -version出现下面结果代表成功 安装whisper pip install openai-whisper在vscode中运行 测试代码 import whisperif __n…

ROS2 2D相机基于AprilTag实现3D空间定位最简流程

文章目录 前言驱动安装下载安装方式一&#xff1a;方式二&#xff1a; 相机检测配置config文件编译、运行程序注意 内参标定标定板运行程序 apriltag空间定位标签打印下载安装可视化结果 前言 AprilTag是一种高性能的视觉标记系统&#xff0c;广泛应用于机器人导航、增强现实和…

Python实战项目:天气数据爬取+数据可视化(完整代码)_python爬虫实战

一、选题的背景 随着人们对天气的关注逐渐增加&#xff0c;天气预报数据的获取与可视化成为了当今的热门话题&#xff0c;天气预报我们每天都会关注&#xff0c;天气情况会影响到我们日常的增减衣物、出行安排等。每天的气温、相对湿度、降水量以及风向风速是关注的焦点。通过…

VXLAN 为何采用UDP

VXLAN 简介 VXLAN是一种网络虚拟化技术&#xff0c;它通过在UDP数据包中封装MAC地址和IP信息&#xff0c;使得二层网络&#xff08;如以太网&#xff09;能够跨越三层网络&#xff08;如IP网络&#xff09;进行扩展。这种封装方式不仅支持TCP流量的传输&#xff0c;还能有效处…