当前位置:网站首页>mysql数据库基础:流程控制
mysql数据库基础:流程控制
2022-07-01 00:41:00 【持久的棒棒君】
流程控制
1、语法
1.1 顺序结构
太简单,懒得写了
1.2 分支结构
# ==========================================
# if函数:
# 语法:if(表达式1,表达式2,表达式3)
# 解释:如果表达式1成立,那么执行表达式2,否则执行表达式3
# 比较结果为真选左边,为假选右边
SELECT IF(10<5,'大','小'); # 小
# 例如:
SELECT last_name,commission_pct,IF(commission_pct IS NULL,'没奖金,呵呵','有奖金,喜喜') 备注 FROM employees;
#========================================
# 多重分支
# if...else...函数
# 语法:
/* if 条件1 then 语句1; elseif 条件2 then 语句2; ... 【else 语句n;】 end if; */
# 应用场合:应用在begin end中
# ======================================
# case 函数
#使用1: case类似于switch的效果
/* case 要判断的字段或表达式 when 常量1 then 要显示的值1【或语句1;】 when 常量2 then 要显示的值2【或语句2;】 ... else 要显示的值n【或语句n;】 end【case;】 AS 命名 FROM 表名; */
# 例如:
/* 案例: 查询员工的工资,有要求如下: 部门号=30,显示的工资为1.1倍 部门号=30,显示的工资为1.2倍 部门号=40,显示的工资为1.3倍 其他部门,显示的工资为原工资 */
# 实现:
SELECT
salary 原始工资,department_id,
CASE
department_id
WHEN 30 THEN salary*1.1
WHEN 40 THEN salary*1.2
WHEN 50 THEN salary*1.3
ELSE
salary
END AS 新工资
FROM
employees;
# 新工资排在查询出来的表格最后
#使用2:类似于多重if
/* case when 条件1 then 要显示的值1【或语句1;】 when 条件2 then 要显示的值2【或语句2;】 ... else 要显示的值n【或语句n;】 end 【case;】 */
# 例如:
/*案例: 查询员工的工资情况 如果工资>20000,显示A级别 如果工资>15000,显示B级别 如果工资>10000,显示C级别 否则显示D级别 */
# 实现
SELECT
salary 工资,
CASE
WHEN salary>20000 THEN 'A'
WHEN salary>15000 THEN 'B'
WHEN salary>10000 THEN 'C'
ELSE
'D'
END AS 工资级别
FROM
employees;
要注意的是,case结构中,如果then或者else后面接的是普通的值,则不需要加分号,如果接的是语句,那么then后面需要加分号,end后面需要加【case;】
- 循环结构
分类:while、loop、repeat
循环控制:
(1)iterate,类似于java中continue,表示结束本次循环,继续下一次循环,iterate后面接循环起的标签
(2)leave,类似于java中的break,表示结束当前所在的循环,leave后面接循环起的标签
注意:循环结构都需要放在begin end语句中(存储过程或函数的begin end中)
# ====================================
# while
# 语法:
/* 【标签:】 while 循环条件 do 循环体; end while【标签】; */
# ====================================
# repeat,类似于do while
# 语法
/* 【标签:】 repeat 循环体; until 结束循环的条件 end repeat 【标签】; */
# ====================================
# loop,没有条件的死循环
# 语法
/* 【标签:】 loop 循环体; end loop【标签】 可以用来模拟简单的死循环 */
2、习题
# ===============================================
# 创建admin表
CREATE TABLE admin1(
id INT PRIMARY KEY,
username VARCHAR(10) NOT NULL,
password INT NOT NULL
);
select * from admin1;
# -----------------------------------------------
# 习题1:往admin表中插入100条数据(循环结构实现)
# 设置结束符为$$
delimiter $$
CREATE PROCEDURE pro_while(IN insetCount INT)
BEGIN
# 声明要给变量
DECLARE i INT DEFAULT 1;
WHILE i<=insetCount DO
INSERT INTO admin1(id,username,password) values (i,CONCAT('rose',i),666);
SET i = i+1;
END WHILE;
END
$$
# 重新设置结束符为;
delimiter ;
# 执行存储过程
CALL pro_while(100);
# 删除存储过程
DROP PROCEDURE pro_while;
# -----------------------------------------
# 习题2:删除admin1表中id为偶数的数据
delimiter $$
CREATE PROCEDURE pro_while_delete()
BEGIN
DECLARE i INT DEFAULT 0;
# 将查询到的结果赋值给@numbers用户变量
SELECT count(*) FROM admin1 INTO @numbers;
sign:WHILE i<@numbers DO
SET i=i+1;
# 如果不是偶数,那么使用iterate结束本次循环,进入下次循环
IF MOD(i,2)!=0 THEN ITERATE sign;
END IF;
# 删除id=i(偶数)的数据
DELETE FROM admin1 WHERE id=i;
END WHILE sign;
END
$$
delimiter ;
CALL pro_while_delete();
DROP PROCEDURE pro_while_delete;
#------------------------------------------
# 习题3:向指定表中插入指定个数的随机的字符串
# 题目描述
/* 表名:stringcontent 其中字段 id:自增长 content varchar(20) 要求:向该表中插入指定个数的随机的字符串 */
# 创建表stringcontent
CREATE TABLE stringcontent(
id INT PRIMARY KEY AUTO_INCREMENT,
content VARCHAR(20)
);
DROP TABLE IF EXISTS stringcontent;
delimiter $$
CREATE PROCEDURE test_randstr_insert(IN insertCount INT)
BEGIN
DECLARE i INT DEFAULT 1; #控制循环
DECLARE str VARCHAR(26) DEFAULT 'abcdefghijklmnopqrstuvwxyz'; # 26个字母的字符串
DECLARE startIndex INT DEFAULT 1; # 起始索引
DECLARE len INT DEFAULT 1; # 截取字符的长度
WHILE i<=insertCount DO
# 产生一个随机的整数,代表字符串起始索引1~26
SET startIndex = FLOOR(RAND()*26+1);
# 产生一个随机的整数,用来代表截取长度
SET len = FLOOR(RAND()*(26-startIndex+1)+1);
SET i = i+1;
# 将截取到的字符串插入到表中
INSERT INTO stringcontent(content) values(SUBSTR(str,startIndex,len));
END WHILE;
END
$$
delimiter ;
# 调用存储过程
CALL test_randstr_insert(10);
边栏推荐
- XJY-220/43AC220V静态信号继电器
- [Deepin] 常用集合
- [leetcode] climb stairs [70]
- Golang treasure house recommendation
- About vctk datasets
- Tcp/ip protocol stack, about TCP_ RST | TCP_ ACK correct attitude
- StrictMode分析Registion-StrictMode原理(4)
- The real topic of the 11th provincial competition of Bluebridge cup 2020 - crop hybridization
- pull_ to_ refresh
- 文件服务设计
猜你喜欢

探索互联网时代STEAM教育创新之路

闭锁继电器YDB-100、100V

2021电赛F题openmv和K210调用openmv api巡线,完全开源。

PHP online confusion encryption tutorial sharing + basically no solution

The liquor and tourism sector recovers, and Yaduo continues to dream of listing. How far is it from "the first share of the new accommodation economy"?

Flutter Error: Cannot run with sound null safety, because the following dependencies don‘t support

Using C language to realize the exchange between the contents of two arrays (provided that the array is the same size)
![Split the linked list [take next first and then cut the linked list to prevent chain breakage]](/img/eb/708ab20c13df75f4dbd2d6461d3602.png)
Split the linked list [take next first and then cut the linked list to prevent chain breakage]

Service grid ASM year end summary: how do end users use the service grid?

友盟(软件异常实时监听的好帮手:Crash)接入教程(有点基础的小白最易学的教程)
随机推荐
机器人编程的培训学科类原理
Q弹松软的大号吐司,带来更舒服的睡眠
系统设置大页
【学习笔记】倍增 + 二分
Flutter Error: Cannot run with sound null safety, because the following dependencies don‘t support
K210 site helmet
Dx-11q signal relay
06. on several ways of redis persistence
Practical shell knowledge
pytorch编程知识(2)
機器人編程的培訓學科類原理
DX-11Q信号继电器
Solve idea:class' xxx 'not found in module' xxx‘
Training discipline principle of robot programming
06.论Redis持久化的几种方式
visual studio 2019 快捷键备忘
Installing mongodb database in Windows Environment
How to scroll uitableview to a specific position - how to scroll uitableview to specific position
【学习笔记】简单dp
Basic knowledge of software and hardware -- diary (1)