MySQL 中的流程控制语句
时间:2022-07-26
本文章向大家介绍MySQL 中的流程控制语句,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.1 if 语句
1.1.1 语法
# 当条件表达式为 true 的时候,返回 值1,否则返回 值2
if(条件表达式, 值1, 值2);
# 类似 java 中的 if ··· else if ··· else 【只能使用在 begin end 之间】
if 条件语句1 then 语句1;
elseif 条件语句2 then 语句2;
...
else 语句n;
end if;
1.1.2 示例
mysql> select * from student;
+----+-----+--------+
| id | sex | name |
+----+-----+--------+
| 1 | 1 | 王大锤 |
| 2 | 0 | 萌妹子 |
| 3 | 0 | 小姐姐 |
| 4 | 1 | 牛魔王 |
+----+-----+--------+
4 rows in set (0.09 sec)
mysql> select id as '编号', if(sex = 1, '男', '女') as '性别', name as '姓名' from student;
+------+------+--------+
| 编号 | 性别 | 姓名 |
+------+------+--------+
| 1 | 男 | 王大锤 |
| 2 | 女 | 萌妹子 |
| 3 | 女 | 小姐姐 |
| 4 | 男 | 牛魔王 |
+------+------+--------+
4 rows in set (0.15 sec)
mysql> create procedure myif(a int)
begin
declare sex varchar(20) default '男';
declare a int default 1;
if a = 1 then set sex = '男';
elseif a = 0 then set sex = '女';
end if;
select sex;
end;
mysql> call myif(1);
+-----+
| sex |
+-----+
| 男 |
+-----+
1 row in set (0.20 sec)
Query OK, 0 rows affected (0.04 sec)
mysql> drop procedure if exists myif;
Query OK, 0 rows affected (0.05 sec)
1.2 case 语句
1.2.1 语法
# 第一种用法
case 表达式
when 值1 then 结果1 或者 语句1 # 如果是语句需要加分号
when 值2 then 结果2 或者 语句2
...
else 结果n 或者 语句n
end [case] # 如果是放在 begin end 之间需要加 case,如果是在 select 后面 case 可以省略
# 第二种用法
case
when 条件1 then 结果1 或者 语句1 # 如果是语句需要加分号
when 条件2 then 结果2 或者 语句2
...
else 结果n 或者 语句n
end [case] # 如果是放在 begin end 之间需要加 case,如果是在 select 后面 case 可以省略
1.2.2 示例
# 第一种用法
# 类似 java 中的 switch ··· case
mysql> select id as '编号',(case sex when 1 then '男' when 0 then '女' end) as '性别',name as '姓名' from student;
+------+------+--------+
| 编号 | 性别 | 姓名 |
+------+------+--------+
| 1 | 男 | 王大锤 |
| 2 | 女 | 萌妹子 |
| 3 | 女 | 小姐姐 |
| 4 | 男 | 牛魔王 |
+------+------+--------+
4 rows in set (0.20 sec)
# 类似 java 中的 switch ··· case ··· default
mysql> select id as '编号',(case sex when 1 then '男' else '女' end) as '性别',name as '姓名' from student;
+------+------+--------+
| 编号 | 性别 | 姓名 |
+------+------+--------+
| 1 | 男 | 王大锤 |
| 2 | 女 | 萌妹子 |
| 3 | 女 | 小姐姐 |
| 4 | 男 | 牛魔王 |
+------+------+--------+
4 rows in set (0.18 sec)
# 第二种用法
mysql> select id '编号',(case when sex = 1 then '男' when sex = 0 then '女' end) '性别',name '姓名' from student;
+------+------+--------+
| 编号 | 性别 | 姓名 |
+------+------+--------+
| 1 | 男 | 王大锤 |
| 2 | 女 | 萌妹子 |
| 3 | 女 | 小姐姐 |
| 4 | 男 | 牛魔王 |
+------+------+--------+
4 rows in set (0.20 sec)
1.3 循环
1.3.1 while 循环
☞ 语法
标签:while 循环条件 do
循环体
end while 标签;
说明 ① 标签是给 while 取个名字,标签和 iterate、leave 结合用于在循环内部对循环进行控制。 ② 个循环先判断条件,条件成立之后,才会执行循环体,每次执行都会先进行判断。
☞ 循环控制
# 类似 java中的 continue
iterate 循环标签;
# 类似 java 中的 break
leave 循环标签;
☞ 示例
# 求 1 ~ n 的和
# 创建存储过程
mysql> create procedure sumnum(a int)
begin
# default 是指定该变量的默认值
declare sum int default 0;
declare i int default 1;
while i<=a do # 循环开始
set sum = sum + i;
set i = i + 1;
end while; # 循环结束
select sum; # 输出结果
end;
Query OK, 0 rows affected (0.06 sec)
# 执行存储过程
mysql> call sumnum(100);
+------+
| sum |
+------+
| 5050 |
+------+
1 row in set (0.08 sec)
Query OK, 0 rows affected (0.04 sec)
# 删除存储过程
mysql> drop procedure if exists sumnum;
Query OK, 0 rows affected (0.05 sec)
1.3.2 loop 循环
☞ 语法
# 死循环
标签:loop
循环体;
end loop 标签;
☞ 示例
# 求 1 ~ n 的和
# 创建存储过程
mysql> create procedure sumnum(a int)
begin
declare sum int default 0;
declare i int default 1;
loop_name:loop # 循环开始
if i > a then
leave loop_name; # 结束循环,类似于 break
end if;
set sum = sum + i;
set i = i + 1;
end loop; # 循环结束
select sum; # 输出结果
end;
Query OK, 0 rows affected (0.06 sec)
# 执行存储过程
mysql> call sumnum(100);
+------+
| sum |
+------+
| 5050 |
+------+
1 row in set (0.09 sec)
Query OK, 0 rows affected (0.04 sec)
# 删除存储过程
mysql> drop procedure if exists sumnum;
Query OK, 0 rows affected (0.07 sec)
1.3.3 repeat 循环
repeat 循环类似于 java 中的 do ··· while 循环,不管如何,循环都会先执行一次,然后再判断结束循环的条件,不满足结束条件,循环体继续执行。这跟和 while 循环不同,while 是先判断条件是否成立再执行循环体。
☞ 语法
标签:repeat
循环体;
until 结束循环的条件 end repeat 标签;
☞ 示例
# 求 1 ~ n 的和
# 创建存储过程
mysql> create procedure sumnum(a int)
begin
declare sum int default 0;
declare i int default 1;
repeat # 循环开始
set sum = sum + i;
set i = i + 1;
until i > a end repeat; # 循环结束
select sum; # 输出结果
end;
Query OK, 0 rows affected (0.06 sec)
# 执行存储过程
mysql> call sumnum(100);
+------+
| sum |
+------+
| 5050 |
+------+
1 row in set (0.10 sec)
Query OK, 0 rows affected (0.04 sec)
# 删除存储过程
mysql> drop procedure if exists sumnum;
Query OK, 0 rows affected (0.07 sec)
- 详析JSONP跨域
- Android Binder漏洞挖掘技术与案例分享
- Stanford机器学习笔记-5.神经网络Neural Networks (part two)
- 监控平台前端SDK开发实践
- 一步步实现静态页面布局
- Stanford机器学习笔记-3.Bayesian statistics and Regularization
- 在R中使用支持向量机(SVM)进行数据挖掘
- 【你问我答】你与Java大牛的距离,只差这24个问题
- Android漏洞扫描工具Code Arbiter
- Huawei HG532 系列路由器远程命令执行漏洞分析
- postMessage与postMessage跨域
- 【手把手教你做项目】自然语言处理:单词抽取/统计
- D-Link系列路由器漏洞挖掘入门
- 大家一直在谈的领域驱动设计(DDD),我们在互联网业务系统是这么实践的
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- 【源码分析】SpringBoot2中取代Druid的超级连接池:HikariCP之ConcurrentBag
- HTML5项目实战之旅行社网站——PC端固定布局
- HTML5项目实战之旅行社网站——移动端流体布局
- HTML5项目实战之旅行社网站——兼容响应式布局
- Oracle数据库相关函数解析
- Oracle用户操作、数据类型、表格修改、约束设置详解
- MyBatis三个查询方法_selectList_selectOne_selectMap
- 通过JDBC、DBUtil实现登陆的练习
- JDBC小项目—员工管理系统
- LOG4J(log for java)详解
- MyBatis-事务管理
- HTML知识清单(附学习网站)
- CSS、CSS3知识点清单
- linux使用MAT分析dump文件
- RabbitMQ 自动创建队列/交换器/绑定