MySQL入门篇-MySQL常用流程控制函数小结
备注:测试数据库版本为MySQL 8.0
这个blog我们来聊聊常见的流程控制函数
如需要scott用户下建表及录入数据语句,可参考:
scott建表及录入数据sql脚本
流程控制函数
函数名 | 函数用途 |
---|---|
CASE | case语句用于条件判断 |
if() | if/else条件判断 |
ifnull() | null数据处理 |
nullif() | return null if expr1 = expr2 |
CASE语句
case语句语法:
CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result …] [ELSE result] END
CASE WHEN [condition] THEN result [WHEN [condition] THEN result …] [ELSE result] END
-- 值判断,根据职位英文名判断职位中文名
select e.empno,e.job,case when e.job = 'SALESMAN' then '销售员'when e.job = 'MANAGER' then '管理人员'else '未知' end as job_china
from emp e;-- 条件判断,小于某个时间点入职的是老员工,大于等于的是新员工
select e.empno,e.hiredate,case when e.hiredate < '1982-01-01' then '老员工' else '新员工' end is_old
from emp e;-- 没有else语句且判断不成功的时候,会返回为空
SELECT CASE 'c'WHEN 'a' THEN 1 WHEN 'b' THEN 2 END is_c;
mysql> -- 值判断,根据职位英文名判断职位中文名
mysql> select e.empno,-> e.job,-> case when e.job = 'SALESMAN' then '销售员'-> when e.job = 'MANAGER' then '管理人员'-> else '未知' end as job_china-> from emp e;
+-------+-----------+--------------+
| empno | job | job_china |
+-------+-----------+--------------+
| 7369 | CLERK | 未知 |
| 7499 | SALESMAN | 销售员 |
| 7521 | SALESMAN | 销售员 |
| 7566 | MANAGER | 管理人员 |
| 7654 | SALESMAN | 销售员 |
| 7698 | MANAGER | 管理人员 |
| 7782 | MANAGER | 管理人员 |
| 7788 | ANALYST | 未知 |
| 7839 | PRESIDENT | 未知 |
| 7844 | SALESMAN | 销售员 |
| 7876 | CLERK | 未知 |
| 7900 | CLERK | 未知 |
| 7902 | ANALYST | 未知 |
| 7934 | CLERK | 未知 |
+-------+-----------+--------------+
14 rows in set (0.00 sec)mysql>
mysql> -- 条件判断,小于某个时间点入职的是老员工,大于等于的是新员工
mysql> select e.empno,-> e.hiredate,-> case when e.hiredate < '1982-01-01' then '老员工' else '新员工' end is_old-> from emp e;
+-------+------------+-----------+
| empno | hiredate | is_old |
+-------+------------+-----------+
| 7369 | 1980-12-17 | 老员工 |
| 7499 | 1981-02-20 | 老员工 |
| 7521 | 1981-02-22 | 老员工 |
| 7566 | 1981-04-02 | 老员工 |
| 7654 | 1981-09-28 | 老员工 |
| 7698 | 1981-05-01 | 老员工 |
| 7782 | 1981-06-09 | 老员工 |
| 7788 | 1987-06-13 | 新员工 |
| 7839 | 1981-11-17 | 老员工 |
| 7844 | 1981-09-08 | 老员工 |
| 7876 | 1987-06-13 | 新员工 |
| 7900 | 1981-12-03 | 老员工 |
| 7902 | 1981-12-03 | 老员工 |
| 7934 | 1982-01-23 | 新员工 |
+-------+------------+-----------+
14 rows in set (0.00 sec)mysql>
mysql> -- 没有else语句且判断不成功的时候,会返回为空
mysql> SELECT CASE 'c'-> WHEN 'a' THEN 1 WHEN 'b' THEN 2 END is_c;
+------+
| is_c |
+------+
| NULL |
+------+
1 row in set (0.00 sec)mysql>
IF函数
if语法:
IF(expr1,expr2,expr3)
If expr1 is TRUE (expr1 <> 0 and expr1 <> NULL), IF() returns expr2. Otherwise, it returns expr3.
-- 如果1>2条件成立,则返回2,否则返回3
select if(1>2,2,3);
-- 如果第一个值不为0或null,则返回2,否则返回3
select if(0,2,3);
select if(null,2,3);
select if(1,2,3);
mysql> -- 如果1>2条件成立,则返回2,否则返回3
mysql> select if(1>2,2,3);
+-------------+
| if(1>2,2,3) |
+-------------+
| 3 |
+-------------+
1 row in set (0.00 sec)mysql> -- 如果第一个值不为0或null,则返回2,否则返回3
mysql> select if(0,2,3);
+-----------+
| if(0,2,3) |
+-----------+
| 3 |
+-----------+
1 row in set (0.00 sec)mysql> select if(null,2,3);
+--------------+
| if(null,2,3) |
+--------------+
| 3 |
+--------------+
1 row in set (0.00 sec)mysql> select if(1,2,3);
+-----------+
| if(1,2,3) |
+-----------+
| 2 |
+-----------+
1 row in set (0.00 sec)
IFNULL函数
ifnull语法:
IFNULL(expr1,expr2)
If expr1 is not NULL, IFNULL() returns expr1; otherwise it returns expr2.
如果expr1非空,则返回expr1,否则返回expr2
-- 将奖金为0的员工显示为0
select e.ename,e.job,e.comm comm from emp e;
select e.ename,e.job,ifnull(e.comm,0) comm from emp e;
mysql> -- 将奖金为0的员工显示为0
mysql> select e.ename,e.job,e.comm comm from emp e;
+--------+-----------+---------+
| ename | job | comm |
+--------+-----------+---------+
| SMITH | CLERK | NULL |
| ALLEN | SALESMAN | 300.00 |
| WARD | SALESMAN | 500.00 |
| JONES | MANAGER | NULL |
| MARTIN | SALESMAN | 1400.00 |
| BLAKE | MANAGER | NULL |
| CLARK | MANAGER | NULL |
| SCOTT | ANALYST | NULL |
| KING | PRESIDENT | NULL |
| TURNER | SALESMAN | 0.00 |
| ADAMS | CLERK | NULL |
| JAMES | CLERK | NULL |
| FORD | ANALYST | NULL |
| MILLER | CLERK | NULL |
+--------+-----------+---------+
14 rows in set (0.00 sec)mysql> select e.ename,e.job,ifnull(e.comm,0) comm from emp e;
+--------+-----------+---------+
| ename | job | comm |
+--------+-----------+---------+
| SMITH | CLERK | 0.00 |
| ALLEN | SALESMAN | 300.00 |
| WARD | SALESMAN | 500.00 |
| JONES | MANAGER | 0.00 |
| MARTIN | SALESMAN | 1400.00 |
| BLAKE | MANAGER | 0.00 |
| CLARK | MANAGER | 0.00 |
| SCOTT | ANALYST | 0.00 |
| KING | PRESIDENT | 0.00 |
| TURNER | SALESMAN | 0.00 |
| ADAMS | CLERK | 0.00 |
| JAMES | CLERK | 0.00 |
| FORD | ANALYST | 0.00 |
| MILLER | CLERK | 0.00 |
+--------+-----------+---------+
14 rows in set (0.00 sec)
nullif 函数
nullif语法:
NULLIF(expr1,expr2)
Returns NULL if expr1 = expr2 is true, otherwise returns expr1
This is the same as CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END.
如果expr1=expr2则返回null,否则返回expr1
mysql> select nullif(1,1);
+-------------+
| nullif(1,1) |
+-------------+
| NULL |
+-------------+
1 row in set (0.00 sec)mysql> select nullif(1,2);
+-------------+
| nullif(1,2) |
+-------------+
| 1 |
+-------------+
1 row in set (0.00 sec)
相关文章:
MySQL入门篇-MySQL常用流程控制函数小结
备注:测试数据库版本为MySQL 8.0 这个blog我们来聊聊常见的流程控制函数 如需要scott用户下建表及录入数据语句,可参考:scott建表及录入数据sql脚本 流程控制函数 函数名函数用途CASEcase语句用于条件判断if()if/else条件判断ifnull()null数据处理nullif()retur…...

大数据技术架构(组件)35——Spark:Spark Streaming(1)
2.3、Spark Streaming2.3.0、OverviewSpark Streaming 是核心 Spark API 的扩展,它支持实时数据流的可扩展、高吞吐量、容错流处理。数据可以从许多来源(如 Kafka、Kinesis 或 TCP 套接字)获取,并且可以使用复杂的算法进行处理&am…...
实现超大文件上传逻辑
引言 文件上传功能是我们开发中经常会遇到的功能点,当日常开发中遇到小文件(比如:头像),可以直接将文件转为字节流直接上传到服务器上即可。但是当遇到大文件这种(比如:一部电影至少1个G)该怎么…...
JavaScript HTML DOM EventListener
JavaScript HTML DOM EventListener 是一个非常重要的概念,在前端开发中被广泛使用。它是用来监听 HTML DOM 上的事件,并执行特定的代码块。 EventListener 的语法非常简单,下面是一个示例代码: element.addEventListener("…...

构建RFID系统的重要组成部分
RFID读写设备,通常被用来扫描读取安装了RFID电子标签的目标物品,能实现快速批量无接触读写,是构建RFID系统的重要组成部分。RFID读写设备,通常有固定式读写设备和可移动读写设备两种。下面来了解一下RFID的特点,RFID系…...

PID控制算法简介
目录 1 简介 2 比例Proportional 3 积分Integral 4 微分Differential 5 公式 6 积分限幅 7 积分限行 8 相关代码 1 简介 PID控制中有P、I、D三个参数,PID即:Proportional(比例)、Integral(积分&#…...
【王道数据结构】第八章 | 排序
目录 8.1. 排序的基本概念 8.2. 插入排序 8.2.1. 直接插入排序 8.2.2. 折半插入排序 8.2.3. 希尔排序 8.3. 交换排序 8.3.1. 冒泡排序 8.3.2. 快速排序 8.4. 选择排序 8.4.1. 简单选择排序 8.4.2. 堆排序 8.5. 归并排序和基数排序 8.5.2. 基数排序 8.1. 排序的基本概念 排…...

95后外贸SOHO,年入7位数,他究竟是怎么做的?
外贸SOHO,一年到底能挣多少钱?有人说:“勤勤恳恳,年薪也就十来万吧”;也有人说:“100万而已我早就已经挣到了”;还有人说:“谁说新手难出头?我做跨境半年赚200万…...

2023年全国最新消防设施操作员精选真题及答案
百分百题库提供消防设施操作员考试试题、消防设施操作员考试预测题、消防设施操作员考试真题、消防设施操作员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 一、多选题 15、以下符合电气火灾监控系统监控设备的安装要求的有:( ) A、…...
mysql 无需修改配置文件,即可改变表数据存储位置
由于Linux系统的mysql 默认数据存储在/var/lib/mysql路径下,而该路径装系统时默认大小仅50G,当我们的数据稍微大一点时就会把该空间占满,无法再插入数据。 针对该问题有两种解决办法: 1、修改/etc/my.cnf配置文件,重启…...

轻松解决Session-Cookie 鉴权(含坑)附代码
Session-Cookie 鉴权 cookie介绍 Cookie 存储在客户端,可随意篡改,不安全有大小限制,最大为 4kb有数量限制,一般一个浏览器对于一个网站只能存不超过 20 个 Cookie,浏览器一般只允许存放 300个 CookieCookie 是不可跨…...
pyinstaller使用详细
目录常用命令spec文件配置报错常用命令 pyinstaller -D xxx.py //打包生成目录(director)pyinstaller -F xxx.py//打包生成单个exe文件pyinstaller xxx.spec //根据现有的spec文件进行打包运行以上命令之一后会生成build、dist文件夹以及xxx.spec文件&a…...

java -数据结构,List相关基础知识,ArrayList的基本使用,泛型的简单、包装类介绍
一、 预备知识-泛型(Generic) 1.1、泛型的引入 比如:我们实现一个简单的顺序表 class MyArrayList{public int[] elem;public int usedSize;public MyArrayList(){this.elem new int[10];}public void add(int key){this.elem[usedSize] key;usedSize;}public …...

RabbitMQ学习总结(10)—— RabbitMQ如何保证消息的可靠性
一、丢失场景 RabbitMQ丢失的以下3种情况: (1)生产者:生产者发送消息至MQ的数据丢失...
购物车案例【版本为vue3】
前言: 首先我们要明白整个购物车的组成。它是由一个主页面加两个组件组合成的。本章主要运用父子之间的通讯: 父传子 子传父 首先新建一个vue3项目,这里有俩种创建方式: vue-cli : ● 输入安装指令 npm init vuelates…...

Multisim14 安装包及安装教程
Multisim14 安装教程 Multisim14下载地址:Kevin的学习站–安装包下载地址 Multisim14 简介: Multisim 14 是美国国家仪器有限公司(National Instrument,NI)推出的以 Windows 为基础、符合工业标准的、具有 SPICE 最佳仿…...
Java实现简单的图书管理系统源码+论文
简单图书管理系统设计(文末附带源码论文) 为图书管理人员编写一个图书管理系统,图书管理系统的设计主要是实现对图书的管理和相关操作,包括3个表: 图书信息表——存储图书的基本信息,包括书号、书名、作者…...

前端调试2
一、用chrome调试(node.js)例:const fs require(fs/promises);(async function() {const fileContent await fs.readFile(./package.json, {encoding: utf-8});await fs.writeFile(./package2.json, fileContent); })();1.先 node index.js 跑一下:2.然…...

AlphaFold 2 处理蛋白质折叠问题
蛋白质是一个较长的氨基酸序列,比如100个氨基酸的规模,如此长的氨基酸序列连在一起是不稳定的,它们会卷在一起,形成一个独特的3D结构,这个3D结构的形状决定了蛋白质的功能。 蛋白质结构预测(蛋白质折叠问题…...

问卷调查会遇到哪些问题?怎么解决?
提到问卷调查我们并不陌生,它经常被用作调查市场、观察某类群体的行为特征等多种调查中。通过问卷调查得出的数据能够非常真实反映出是市场的现状和变化趋势,所以大家经常使用这个方法进行调查研究。不过,很多人在进行问卷调查的时候也会遇到…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...

DeepSeek越强,Kimi越慌?
被DeepSeek吊打的Kimi,还有多少人在用? 去年,月之暗面创始人杨植麟别提有多风光了。90后清华学霸,国产大模型六小虎之一,手握十几亿美金的融资。旗下的AI助手Kimi烧钱如流水,单月光是投流就花费2个亿。 疯…...

qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001
qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类,直接把源文件拖进VS的项目里,然后VS卡住十秒,然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分,导致编译的时候找不到了。因…...
【Java】Ajax 技术详解
文章目录 1. Filter 过滤器1.1 Filter 概述1.2 Filter 快速入门开发步骤:1.3 Filter 执行流程1.4 Filter 拦截路径配置1.5 过滤器链2. Listener 监听器2.1 Listener 概述2.2 ServletContextListener3. Ajax 技术3.1 Ajax 概述3.2 Ajax 快速入门服务端实现:客户端实现:4. Axi…...

Linux 内存管理调试分析:ftrace、perf、crash 的系统化使用
Linux 内存管理调试分析:ftrace、perf、crash 的系统化使用 Linux 内核内存管理是构成整个内核性能和系统稳定性的基础,但这一子系统结构复杂,常常有设置失败、性能展示不良、OOM 杀进程等问题。要分析这些问题,需要一套工具化、…...
MyBatis-Plus 常用条件构造方法
1.常用条件方法 方法 说明eq等于 ne不等于 <>gt大于 >ge大于等于 >lt小于 <le小于等于 <betweenBETWEEN 值1 AND 值2notBetweenNOT BETWEEN 值1 AND 值2likeLIKE %值%notLikeNOT LIKE %值%likeLeftLIKE %值likeRightLIKE 值%isNull字段 IS NULLisNotNull字段…...

可视化预警系统:如何实现生产风险的实时监控?
在生产环境中,风险无处不在,而传统的监控方式往往只能事后补救,难以做到提前预警。但如今,可视化预警系统正在改变这一切!它能够实时收集和分析生产数据,通过直观的图表和警报,让管理者第一时间…...