1.if函数:
if(表达式1,表达式2,表达式3)
执行顺序:
如果表达式1成立,则返回表达式2的值,否则返回表达式3的值
应用:
任何地方
2.case结构:
情况1:类似于java中的switch语句,一般用于实现等值判断
语法:
CASE 变量|表达式|字段
WHEN 要判断的值 THEN 返回的值1或者语句1; 注意结尾的分号
WHEN 要判断的值 THEN 返回的值2或者语句2;
...
ELSE 要返回的值n或者语句n;
END CASE;
情况2:类似于java中的多重if判断,一般用于实现区间判断
语法:
CASE
WHEN 要判断的条件1 THEN 返回的值1或者语句1;
WHEN 要判断的条件2 THEN 返回的值2或者语句2;
...
ELSE 要返回的值n或者语句n:
END CASE;
特点:
1.可以错作为表达式嵌套在其他语句中使用,可以放在任何地方,begin end中或者外边
2.可以作为独立的语句使用,只能放在begin end中
3.如果when中的值满足条件成立,则执行对应的then语句,并结束case
4.如果都不满足,则执行else中的语句或者值
5.else可以省略,如果else省略,并且所有的when语句都不满足,则返回null;
示例1:传入成绩,90-100返回A,80-90返回B,70-80返回C,其他返回D:
声明:这是个范围判断,所以使用情况2
create procedure soure_check(in source int)
begin
case
when source>90 then select 'A';
when source>80 then select 'B';
when source>70 then select 'C';
else select 'D';
end case;
end
调用:
call soure_check(90);
示例2:传入90返回A,传入80返回B
声明:进行等值判断,使用情况1
create procedure myp7(in num int)
begin
case num
when 90 then select 'a';
when 80 then select 'b';
else select 'c';
end case;
end
调用:返回c
call myp7(60);
3.if结构
功能:实现多重分支
语法:
if 条件1 then 语句1;
elseif 条件2 then 语句2;
....
end if;
案例:根据传入的成绩,来显示等级,比如传入的成绩:90-100,返回的是A,80-90返回的是B,70-80返回的是C,否则返回D
因为有一个返回值,所以以创建函数的形式来做:
声明:
create function testif(source int) returns varchar(20)
begin
#多个条件间用and进行连接
if source>90 and source <100 then return 'A';
elseif source>80 then return 'B';
elseif source>70 then return 'C';
else return 'D';
#必须加end if
end if;
end
调用:
select testif(90);
4.循环结构:
分类:while、 loop 、repeat
循环控制:
1.iterate 类似于continue,继续,结束本次循环,进行下一次
2.leave 类似于break,跳出,结束当前所在的循环
1.while
语法:【标签:】可加可不加,不加就是普通循环,加上了可以配合循环控制来使用
【标签:】 while 循环条件 do
循环体;
end while 【标签】;
2.loop:注意loop没有加条条件,所以可以模拟死循环,并且配置leave跳出循环
语法:
【标签:】 loop
循环体;
end loop 【标签】;
3.repeat:类似于java中do while
语法:
【标签:】 repeat
循环体;
until 结束循环的条件;
1案例:批量插入,根据传入的数值,确定需要插入的次数
声明:
CREATE PROCEDURE pro_while ( IN count INT )
BEGIN
#定义其实变量
DECLARE i INT DEFAULT 1;
#while循环结构
WHILE
i < count DO
INSERT INTO USER name,age
VALUES
(CONCAT( '吴孟达', i ), i );
#变量+1
SET i = i + 1;
END WHILE;#结束循环
END
调用
call pro_while(100);
2案例:配合leave使用(相当于break),根据次数插入到admin表中多条记录,如果次数大于20则停止
声明:
CREATE PROCEDURE test_while ( IN count INT ) BEGIN
#定义其实变量
DECLARE
i INT DEFAULT 0;
#定义while循环的标签
a :WHILE
i < count DO
#循环体
INSERT INTO `user` ( NAME, age ) VALUES ( concat( '吴孟达', i ), i );
#if判断
IF i >= 20 THEN
#leave while标签
LEAVE a;
#结束if判断
END IF;
#局部变量+1
set i=i+1;
#结束while循环
END WHILE a;
END
调用:只插入了20条当到20时,跳出循环
call test_while(100);
3.案例3:配合iterate使用(相当于continue),只插入偶数条,奇数的不插
声明:
CREATE DEFINER=`root`@`%` PROCEDURE `test_interate`( IN count INT )
BEGIN
#声明变量
DECLARE i INT DEFAULT 0;
a:while i<count do
#变量的赋值和必须在使用前,如果把这句放在末尾,会卡住!
set i=i+1;
#这时i有了起始值,再进行使用!mod取余函数
if mod(i,2)!=0 then iterate a;
end if;
insert into user(name,age) values(concat('吴孟达',i),i);
end while a;
END
调用:
call test_interate(100);

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现