MySQL----case的用法
在 MySQL 中,CASE 表达式是一个用于条件判断的功能,可以根据不同的条件返回不同的结果。CASE 表达式通常用于 SELECT 查询语句中,可以在 SQL 中灵活地进行条件判断和数据转换。CASE 有两种基本的语法形式:
- 简单 CASE 表达式(Simple CASE)
- 搜索 CASE 表达式(Searched CASE)
下面将详细讲解这两种 CASE 表达式的用法及其应用场景。
1. 简单 CASE 表达式 (Simple CASE)
简单 CASE 表达式通过对某个列的值进行条件匹配,来返回不同的结果。其语法格式如下:
CASE column_name WHEN value1 THEN result1 WHEN value2 THEN result2 WHEN value3 THEN result3 ELSE default_result
END
- column_name:用于匹配的列名。
- value1, value2, …:列的不同值。
- result1, result2, …:当列的值匹配时返回的结果。
- ELSE:可选的默认结果,如果没有匹配到任何值时返回该结果。
示例:根据成绩等级显示学生的评级
假设有一个学生成绩表 students,包含以下字段:id(学生ID)、name(学生姓名)、score(成绩)。
SELECT name,score,CASE scoreWHEN 100 THEN '优秀'WHEN 80 THEN '良好'WHEN 60 THEN '及格'ELSE '不及格'END AS grade
FROM students;
解释:
- 该查询将会根据
score的值来为每个学生打上对应的等级(优秀、良好、及格或不及格)。
2. 搜索 CASE 表达式 (Searched CASE)
搜索 CASE 表达式更加灵活,允许对不同的条件表达式进行匹配,而不是单纯与某个列的值进行比较。其语法格式如下:
CASEWHEN condition1 THEN result1WHEN condition2 THEN result2WHEN condition3 THEN result3ELSE default_result
END
- condition1, condition2, …:可以是任意的布尔表达式(例如:
score > 90)。 - result1, result2, …:条件满足时返回的结果。
- ELSE:可选的默认结果。
示例:根据学生的成绩区间判断等级
SELECT name,score,CASE WHEN score >= 90 THEN '优秀'WHEN score >= 80 THEN '良好'WHEN score >= 60 THEN '及格'ELSE '不及格'END AS grade FROM students;
解释:
- 这里的
CASE表达式通过WHEN后面的条件判断来确定学生的成绩等级。例如,score >= 90表示成绩大于或等于 90 的学生为“优秀”。 - 这种方式允许更加灵活的条件判断,且条件可以是任意布尔表达式。
3.CASE表达式的常见应用
3.1 在 SELECT 查询中使用CASE
使用 CASE 可以在查询结果中根据不同的条件计算出不同的值。
SELECT id,name,CASEWHEN age < 18 THEN '未成年'WHEN age BETWEEN 18 AND 60 THEN '成人'ELSE '老年'END AS age_group
FROM employees;
这个例子中,CASE 用来根据 age 字段判断年龄段,并为每个人标记相应的年龄组(如“未成年”,“成人”,“老年”)。
3.2 在 UPDATE 语句中使用CASE
你也可以在 UPDATE 语句中使用 CASE 来根据不同的条件更新不同的值。
sql
UPDATE employees SET salary = CASE WHEN position = 'Manager' THEN salary * 1.1 WHEN position = 'Developer' THEN salary * 1.05 ELSE salary END;
这个查询根据员工的职位调整薪水,经理的薪水增长 10%,开发者的薪水增长 5%,其他职位的薪水不变。
3.3 在 ORDER BY 中使用CASE
你可以在 ORDER BY 子句中使用 CASE 来根据特定条件排序。
sql
SELECT id,name,CASEWHEN age < 18 THEN '未成年'WHEN age BETWEEN 18 AND 60 THEN '成人'ELSE '老年'END AS age_group
FROM employees;
这个查询将会根据学生成绩的不同区间来排序,将成绩高于 90 的学生排在最前面,依此类推。
4.CASE表达式的注意事项
- ELSE 是可选的:如果没有
ELSE子句,并且没有条件匹配,CASE将返回NULL。 - 条件顺序很重要:
CASE表达式按顺序检查每个WHEN条件,因此,越早满足的条件会越先被匹配。 - 返回类型一致性:
CASE表达式中的所有THEN结果和ELSE默认结果应该有相同的数据类型。如果数据类型不一致,MySQL 会尝试隐式转换类型,但可能导致错误或数据不准确。
5. 性能注意事项
虽然 CASE 表达式功能强大且灵活,但它在某些复杂查询中可能会影响性能。特别是当 CASE 表达式在大表上进行多次计算时,可能会导致查询性能下降。如果查询非常复杂,考虑使用视图或分步处理来提高查询效率。
总结
CASE 表达式是 MySQL 中一个非常有用的条件判断工具,它可以使得 SQL 查询更加灵活和动态。通过 CASE,可以轻松地根据不同的条件对数据进行分类、转换、排序或更新,是 SQL 查询中常见且强大的功能之一。
相关文章:
MySQL----case的用法
在 MySQL 中,CASE 表达式是一个用于条件判断的功能,可以根据不同的条件返回不同的结果。CASE 表达式通常用于 SELECT 查询语句中,可以在 SQL 中灵活地进行条件判断和数据转换。CASE 有两种基本的语法形式: 简单 CASE 表达式&…...
Unity XR-XR Interaction Toolkit开发使用方法(十)组件介绍(XR Interaction Group)
目录 一、插件介绍 二、主要组件 XR Interaction Manager XR Controller XR Interactor XR Direct Interactor XR Ray Interactor XR Socket Interactor XR Gaze Interactor 三、XR Interaction Group 1、组件介绍 2、核心功能与特点 优先级与冲突管理 动态交互切…...
深入理解 并查集LRUCaChe
并查集&LRUCaChe 个人主页:顾漂亮 文章专栏:Java数据结构 1.并查集的原理 在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后根据一定规律将归于同一组元素的…...
详解 c++ 中的 namespage
C 中的命名空间很特别,其他编程语言基本都没有。命名空间介于函数与类之间,兼顾了二者的一些优点。这篇博客根据 chatgpt 的回答整理。 文章目录 **1. 什么是 namespace(命名空间)?****2. 语法****3. 使用 namespace 访…...
50周学习go语言:第五周 复合类型与词频统计
以下是第五周复合类型(数组、切片与映射)的详细学习内容,按照第四周的深度要求设计: 第五周:复合类型与词频统计 一、复合类型详解 1. 数组(Array) // 声明与初始化 var arr1 [3]int …...
HTTP非流式请求 vs HTTP流式请求
文章目录 HTTP 非流式请求 vs 流式请求一、核心区别 服务端代码示例(Node.js/Express)非流式请求处理流式请求处理 客户端请求示例非流式请求(浏览器fetch)流式请求处理(浏览器fetch) Python客户端示例&…...
深圳南柯电子|医疗设备EMC测试整改检测:零到一,保障医疗安全
在当今医疗科技飞速发展的时代,医疗设备的电磁兼容性(EMC)已成为确保其安全、有效运行的关键要素之一。EMC测试整改检测不仅关乎设备的性能稳定性,更是保障患者安全、避免电磁干扰引发医疗事故的重要措施。 一、医疗设备EMC测试整…...
详解:事务注解 @Transactional
创作内容丰富的干货文章很费心力,感谢点过此文章的读者,点一个关注鼓励一下作者,激励他分享更多的精彩好文,谢谢大家! Transactional 是 Spring Framework 中常用的注解之一,它可以被用于管理事务。通过使…...
【虚拟仪器技术】labview操作指南和虚拟仪器技术习题答案(一)
今天是2025年2月24日,画的是fate/Grand Order里面的阿尔托莉雅.卡斯特,武内老师的画。 目录 第1章 第2章 第3章 第4章 第5章 关注作者了解更多 我的其他CSDN专栏 毕业设计 求职面试 大学英语 过程控制系统 工程测试技术 虚拟仪器技术 可编程…...
在Linux桌面上创建Idea启动快捷方式
1、在桌面新建idea.desktop vim idea.desktop [Desktop Entry] EncodingUTF-8 NameIntelliJ IDEA CommentIntelliJ IDEA Exec/home/software/idea-2021/bin/idea.sh Icon/home/software/idea-2021/bin/idea.svg Terminalfalse TypeApplication CategoriesApplication;Developm…...
渗透测试(WAF过滤information_schema库的绕过,sqllib-46关,海洋cms9版本的注入)
1.sqlin-lib 46关 打开网站配置文件发现 此网站的对ID进行了排序,我们可以知道,order by接不了union ,那我们可以通过测试sort,rond等函数,观察网页的反馈来判断我们的盲注是否正确 我们发现 当参数有sort来排序时&…...
Unity基础——资源导出分享为Unity Package
一.选中要打包的文件夹,右击,点击Exporting package 二.勾选 Include Dependencies,点击Export Include Dependencies:代表是否包含资源依赖的选项 三.选择保存的位置,即可生成Unity package 最终形成文件:…...
C语言【指针篇】(三)
C语言【指针篇】(三) 前言正文1. 数组名的理解2. 使用指针访问数组3. 一维数组传参的本质4. 冒泡排序5. 二级指针6. 指针数组7. 指针数组模拟二维数组 总结 前言 本文主要基于前面对指针的掌握,进一步学习:数组名的理解、使用指针…...
DevSecOps普及:安全与开发运维的深度融合
一、引言 随着软件开发模式的演进,DevOps已成为现代软件工程的主流实践。然而,在传统的DevOps流程中,安全往往被视为开发和运维之外的额外环节,导致安全漏洞在产品交付后才被发现,增加了修复成本和风险。为了解决这一…...
【JAVA-数据结构】Map和Set
上一篇我们聊到了排序相关内容,这一篇我们对Map和Set进行一系列说明,大家自取。 1.搜索树 1.1 概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节…...
从 0 到 1,用 Python 构建超实用 Web 实时聊天应用
从 0 到 1,用 Python 构建超实用 Web 实时聊天应用 本文深入剖析如何运用 Python 的 Flask 框架与 SocketIO 扩展,搭建一个功能完备的 Web 实时聊天应用。从环境搭建、前后端代码实现,到最终运行展示,逐步拆解关键步骤࿰…...
轻松搭建:使用Anaconda创建虚拟环境并在PyCharm中配置
一、使用Anaconda创建虚拟环境 1. 安装Anaconda 2..conda常用的命令 3. 创建虚拟环境-以搭建MachineVision为例 4. 激活虚拟环境 5. 安装依赖包 二、PyCharm配置环境 在进行Python项目开发时,合理的环境管理是必不可少的,特别是当你在多个项目中…...
【新人系列】Python 入门专栏合集
✍ 个人博客:https://blog.csdn.net/Newin2020?typeblog 📝 专栏地址:https://blog.csdn.net/newin2020/category_12801353.html 📣 专栏定位:为 0 基础刚入门 Python 的小伙伴提供详细的讲解,也欢迎大佬们…...
linux ununtu安装mysql 怎么在my.cnf文件里临时配置 无密码登录
在 Ubuntu 中,若需通过修改 my.cnf 临时禁用 MySQL 的密码验证(例如忘记 root 密码需要重置),可以通过添加 skip-grant-tables 选项实现。以下是具体步骤: 步骤 1:编辑 MySQL 配置文件 1. 打开 MySQL 配置…...
git,bash - 从一个远端git库只下载一个文件的方法
文章目录 git,bash - 从一个远端git库只下载一个文件的方法概述笔记写一个bash脚本来自动下载get_github_raw_file_from_url.shreanme_file.shfind_key_value.sh执行命令 END git,bash - 从一个远端git库只下载一个文件的方法 概述 github上有很多大佬上传了电子书库…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...
VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...
嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...
Java数组Arrays操作全攻略
Arrays类的概述 Java中的Arrays类位于java.util包中,提供了一系列静态方法用于操作数组(如排序、搜索、填充、比较等)。这些方法适用于基本类型数组和对象数组。 常用成员方法及代码示例 排序(sort) 对数组进行升序…...
LINUX编译vlc
下载 VideoLAN / VLC GitLab 选择最新的发布版本 准备 sudo apt install -y xcb bison sudo apt install -y autopoint sudo apt install -y autoconf automake libtool编译ffmpeg LINUX FFMPEG编译汇总(最简化)_底部的附件列表中】: ffmpeg - lzip…...
【HTML】HTML 与 CSS 基础教程
作为 Java 工程师,掌握 HTML 和 CSS 也是需要的,它能让你高效与前端团队协作、调试页面元素,甚至独立完成简单页面开发。本文将用最简洁的方式带你掌握核心概念。 一、HTML,网页骨架搭建 核心概念:HTML通过标签定义内…...
