MySQL -> 流程控制函数:分支(if,case),循环(while,loop,repeat)

分支函数之if结构:if(表达式1,表达式2,表达式3)函数;if 条件 then 语句;elseif then

# if()函数
"if(表达式1,表达式2,表达式3)":可以用在任何地方
如果表达式1成立,则返回表达式2;
如果表达式1不成立,则返回表示式3;

# if结构
"在函数中输入一个年龄,给年龄分组":
delimiter #
create function mmp2(age int) returns varchar(22)
begin 
	if age>=60 and age<=110 then return '老人';
	elseif age between 30 and 60 then return '中年人'
	else return '小人';
	end if;
end $

select mmp2(23)$

分支函数之case结构:语句后面加 ; ,

"begin end之外的时"
# 一:等值
case age
when 11 then "返回"
when 22 then "返回"
else "返回"
end

# 二:条件
case 
when age>11 then "返回"
when age>22 then "返回"
else "返回"
end

"在存储过程中输入一个年龄,给年龄分组":
delimiter $
create procedure mmp(in age int)
begin
	case
	when age>=60 then select '老人'; # then后面是语句,要加;
	when age>=30 then select '中年人';
	else select '小人';
	end case; # begin end中结束要加case 和 ;
end $

call mmp(50)$

循环:while,loop,repeat

"简单的while循环":
# procedure和function的选择,不需要返回值的时候必须用procedure,只有一个返回的时候使用function
"进行多次添加数据"
delimiter $
create procedure mmp(in number int)
begin
	declare led int default 1;
	while led<=number do  # while 条件 do 循环体; end while;
		insert into(id,name) values(concat('rod',led),'0000');
		set led=led+1;
	end while;
end $

call mmp(100)$# 添加100次
"添加标签":使用leave,iterate的时候需要用到标签
delimiter $
create procedure mmp(in number int)
begin
	declare led int default 1;
	a:while led<=number do  # 标签a
		insert into(id,name) values(concat('rod',led),'0000');
		set led=led+1;
	end while a;# 关闭的时候也要用a标签
end $

循环中的break,continue:SQL中iterate类似continue,leave类似break

"使用leave停止while循环"
delimiter $
create procedure mmp1(in number int)
begin
	declare led int default 1;
	a:while led<=number do
		if led>=20 
		then leave a;# 如果led>=20,就停止leave,a标签标标示放回到a索引
		end if;
		insert into(id,name) values(concat(('rod'),led),'0000');
		set led=led+1;
	end while a;
end $

call mmp(100)$	#添加100次,虽然它最多添加20次

"iterate:"
delimiter $
create procedure mmp2(number int)
begin
	declare led int default 0;
	a:while led<=number do
		set led=led+1;
		if mod(led,2)==0 then iterate a;# 如果led+1为偶数(因为是从0开始,所以这里+1从1开始的),则跳出循环
		end if;
		insert into(id,name) values(concat(('rod'),led),'0000');#此时的led是已经+1的led
	end while a;
end $

call mmp2(100)$
"loop无线循环"
# 无限循环体loop,不存在条件,想结束只有自己加if等条件leave,iterate结束loop
a:loop
	循环体
end loop a;

"先执行在判断"
a:repeat
	循环体;
until 结束条件  # 这里不是循环条件,是结束循环的条件
end repeat a;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值