当前位置: 首页 > news >正文

MySQL入门篇-MySQL常用流程控制函数小结

备注:测试数据库版本为MySQL 8.0

这个blog我们来聊聊常见的流程控制函数

如需要scott用户下建表及录入数据语句,可参考:
scott建表及录入数据sql脚本

流程控制函数

函数名函数用途
CASEcase语句用于条件判断
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用户下建表及录入数据语句&#xff0c;可参考: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 的扩展&#xff0c;它支持实时数据流的可扩展、高吞吐量、容错流处理。数据可以从许多来源&#xff08;如 Kafka、Kinesis 或 TCP 套接字&#xff09;获取&#xff0c;并且可以使用复杂的算法进行处理&am…...

实现超大文件上传逻辑

引言 文件上传功能是我们开发中经常会遇到的功能点,当日常开发中遇到小文件&#xff08;比如&#xff1a;头像&#xff09;&#xff0c;可以直接将文件转为字节流直接上传到服务器上即可。但是当遇到大文件这种&#xff08;比如&#xff1a;一部电影至少1个G&#xff09;该怎么…...

JavaScript HTML DOM EventListener

JavaScript HTML DOM EventListener 是一个非常重要的概念&#xff0c;在前端开发中被广泛使用。它是用来监听 HTML DOM 上的事件&#xff0c;并执行特定的代码块。 EventListener 的语法非常简单&#xff0c;下面是一个示例代码&#xff1a; element.addEventListener("…...

构建RFID系统的重要组成部分

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

PID控制算法简介

目录 1 简介 2 比例Proportional 3 积分Integral 4 微分Differential 5 公式 6 积分限幅 7 积分限行 8 相关代码 1 简介 PID控制中有P、I、D三个参数&#xff0c;PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&#…...

【王道数据结构】第八章 | 排序

目录 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&#xff0c;一年到底能挣多少钱&#xff1f;有人说&#xff1a;“勤勤恳恳&#xff0c;年薪也就十来万吧”&#xff1b;也有人说&#xff1a;“100万而已我早就已经挣到了”&#xff1b;还有人说&#xff1a;“谁说新手难出头&#xff1f;我做跨境半年赚200万&#xf…...

2023年全国最新消防设施操作员精选真题及答案

百分百题库提供消防设施操作员考试试题、消防设施操作员考试预测题、消防设施操作员考试真题、消防设施操作员证考试题库等,提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 一、多选题 15、以下符合电气火灾监控系统监控设备的安装要求的有:( ) A、…...

mysql 无需修改配置文件,即可改变表数据存储位置

由于Linux系统的mysql 默认数据存储在/var/lib/mysql路径下&#xff0c;而该路径装系统时默认大小仅50G&#xff0c;当我们的数据稍微大一点时就会把该空间占满&#xff0c;无法再插入数据。 针对该问题有两种解决办法&#xff1a; 1、修改/etc/my.cnf配置文件&#xff0c;重启…...

轻松解决Session-Cookie 鉴权(含坑)附代码

Session-Cookie 鉴权 cookie介绍 Cookie 存储在客户端&#xff0c;可随意篡改&#xff0c;不安全有大小限制&#xff0c;最大为 4kb有数量限制&#xff0c;一般一个浏览器对于一个网站只能存不超过 20 个 Cookie&#xff0c;浏览器一般只允许存放 300个 CookieCookie 是不可跨…...

pyinstaller使用详细

目录常用命令spec文件配置报错常用命令 pyinstaller -D xxx.py //打包生成目录&#xff08;director&#xff09;pyinstaller -F xxx.py//打包生成单个exe文件pyinstaller xxx.spec //根据现有的spec文件进行打包运行以上命令之一后会生成build、dist文件夹以及xxx.spec文件&a…...

java -数据结构,List相关基础知识,ArrayList的基本使用,泛型的简单、包装类介绍

一、 预备知识-泛型(Generic) 1.1、泛型的引入 比如&#xff1a;我们实现一个简单的顺序表 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】

前言&#xff1a; 首先我们要明白整个购物车的组成。它是由一个主页面加两个组件组合成的。本章主要运用父子之间的通讯&#xff1a; 父传子 子传父 首先新建一个vue3项目&#xff0c;这里有俩种创建方式&#xff1a; vue-cli &#xff1a; ● 输入安装指令 npm init vuelates…...

Multisim14 安装包及安装教程

Multisim14 安装教程 Multisim14下载地址&#xff1a;Kevin的学习站–安装包下载地址 Multisim14 简介&#xff1a; Multisim 14 是美国国家仪器有限公司&#xff08;National Instrument&#xff0c;NI&#xff09;推出的以 Windows 为基础、符合工业标准的、具有 SPICE 最佳仿…...

Java实现简单的图书管理系统源码+论文

简单图书管理系统设计&#xff08;文末附带源码论文&#xff09; 为图书管理人员编写一个图书管理系统&#xff0c;图书管理系统的设计主要是实现对图书的管理和相关操作&#xff0c;包括3个表&#xff1a; 图书信息表——存储图书的基本信息&#xff0c;包括书号、书名、作者…...

前端调试2

一、用chrome调试(node.js)例&#xff1a;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 跑一下&#xff1a;2.然…...

AlphaFold 2 处理蛋白质折叠问题

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

问卷调查会遇到哪些问题?怎么解决?

提到问卷调查我们并不陌生&#xff0c;它经常被用作调查市场、观察某类群体的行为特征等多种调查中。通过问卷调查得出的数据能够非常真实反映出是市场的现状和变化趋势&#xff0c;所以大家经常使用这个方法进行调查研究。不过&#xff0c;很多人在进行问卷调查的时候也会遇到…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...