mysql的判断语句

if

if 用于做条件判断,具体的语法结构如下,在 if 条件判断的结构中, ELSE IF 结构可以有多个,也可以没有。 ELSE 结构可以有,也可以没有。

复制代码
IF 条件1 THEN
.....
ELSEIF 条件2 THEN -- 可选
.....
ELSE -- 可选
.....
END IF;

案例

复制代码
create procedure p3()
begin
declare score int default 58;
declare result varchar(10);
if score >= 85 then
    set result := '优秀';
elseif score >= 60 then
    set result := '及格';
else
    set result := '不及格';
end if;
select result;
end;
call p3();

case

如果判定条件有多个,多个条件之间,可以使用 and 或 or 进行连接。

方法一

复制代码
-- 含义: 当case_value的值为 when_value1时,执行statement_list1,当值为 when_value2时,
执行statement_list2, 否则就执行 statement_list
CASE case_value
WHEN when_value1 THEN statement_list1
[ WHEN when_value2 THEN statement_list2] ...
[ ELSE statement_list ]
END CASE;

方法二

复制代码
-- 含义: 当条件search_condition1成立时,执行statement_list1,当条件search_condition2成
立时,执行statement_list2, 否则就执行 statement_list
CASE
WHEN search_condition1 THEN statement_list1
[WHEN search_condition2 THEN statement_list2] ...
[ELSE statement_list]
END CASE;

案例

复制代码
create procedure p6(in month int)
begin
declare result varchar(16);
case
	when month >= 1 and month <= 3 then
		set result := '第一季度';
	when month >= 4 and month <= 6 then
		set result := '第二季度';
	when month >= 7 and month <= 9 then
		set result := '第三季度';
	when month >= 10 and month <= 12 then
		set result := '第四季度';
	else
		set result := '非法参数';
	end case ;
	
	select concat('您输入的月份为: ',month, ', 所属的季度为: ',result);
end;
call p6(16);

while

while 循环是有条件的循环控制语句。满足条件后,再执行循环体中的 SQL 语句。

复制代码
-- 先判定条件,如果条件为true,则执行逻辑,否则,不执行逻辑
WHILE 条件 DO
    SQL逻辑...
END WHILE;

案例

复制代码
-- A. 定义局部变量, 记录累加之后的值;
-- B. 每循环一次, 就会对n进行减1 , 如果n减到0, 则退出循环
create procedure p7(in n int)
	begin
	declare total int default 0;
	while n>0 do
		set total := total + n;
		set n := n - 1;
	end while;
	select total;
	end;
call p7(100);

repeat

repeat 是有条件的循环控制语句 , 当满足 until 声明的条件的时候,则退出循环

复制代码
-- 先执行一次逻辑,然后判定UNTIL条件是否满足,如果满足,则退出。如果不满足,则继续下一次循环
REPEAT
    SQL逻辑...
    UNTIL 条件
END REPEAT;

案例

复制代码
-- A. 定义局部变量, 记录累加之后的值;
-- B. 每循环一次, 就会对n进行-1 , 如果n减到0, 则退出循环
create procedure p8(in n int)
	begin
	declare total int default 0;
	repeat
		set total := total + n;
		set n := n - 1;
		until n <= 0
	end repeat;
	select total;
	end;
call p8(10);
call p8(100);

loop

LOOP 实现简单的循环,如果不在 SQL 逻辑中增加退出循环的条件,可以用其来实现简单的死循环。LOOP可以配合一下两个语句使用:

  • LEAVE :配合循环使用,退出循环。

  • ITERATE:必须用在循环中,作用是跳过当前循环剩下的语句,直接进入下一次循环。

    [begin_label:] LOOP
    SQL逻辑...
    END LOOP [end_label];

    LEAVE label; -- 退出指定标记的循环体
    ITERATE label; -- 直接进入下一次循环

案例

复制代码
-- A. 定义局部变量, 记录累加之后的值;
-- B. 每循环一次, 就会对n进行-1 , 如果n减到0, 则退出循环 ----> leave xx
create procedure p9(in n int)
	begin
	declare total int default 0;
	sum:loop
		if n<=0 then
			leave sum;
		end if;
			set total := total + n;
			set n := n - 1;
	end loop sum;
	select total;
	end;
call p9(100);
相关推荐
xcLeigh4 分钟前
KES数据库数据类型与SQL高级语法
大数据·数据库·sql·kes·高级语法·数据选型
入瘾9 小时前
etcd 显示连接失败
数据库·chrome·etcd
本体智能9 小时前
预制指标、宽表、SQL、本体ABC:真正决定长期成本的,是一次变更会波及多少层
数据库·sql·本体神经网络·uino数据智能引擎
长安11089 小时前
数据库基础知识----数据库大观
数据库·oracle
J超会运9 小时前
OpenEuler系统MySQL故障排查终极指南
mysql
瀚高PG实验室10 小时前
使用hgdbdeveloper开发工具导出数据后在异机恢复时报错
数据库·瀚高数据库
百结21411 小时前
PostgreSQL 初体验
数据库·postgresql
ward RINL11 小时前
Redis 安装及配置教程(Windows)【安装】
数据库·windows·redis
bingHHB12 小时前
金蝶云星空旗舰版 × 赛狐ERP:亚马逊卖家业财一体化的最后一公里
运维·数据库·集成学习
Nontee13 小时前
Redis高可用架构解析
数据库·redis·架构