mysql流程分支:分支结构、循环结构:if、else、case、while、loop、repeat的使用

1 分类

解决复杂问题不可能通过一个SQL语句完成,我们需要执行多个SQL操作。流程控制语句的作用就是控制存储过程中SQL语句的执行顺序,是我们完成复杂操作必不可少的一部分。只要是执行的程序,流程就分为三大类:

  • 顺序结构:程序从上往下依次执行
  • 分支结构:程序按条件进行选择执行,从两条或多条路径中选择一条执行
  • 循环结构:程序满足一定条件下,重复执行一组语句

2 语句

  • 条件判断语句:IF语句和CASE语句
  • 循环语句:LOOP、WHILE和REPEAT语句
  • 跳转语句:ITERATE和LEAVE语句

3 分支结构

3.1 IF

3.1.1 语法

IF 表达式1 THEN 操作1
[ELSE 表达式2 THEN 操作2]......
[ELSE 操作N]
END IF

3.1.2 举例

# 情况1
create procedure test_if()
begin
	#声明变量 
	declare stu_name varchar(15);
	#使用if判断
	if stu_name is null
			then select 'stu_name is null';
	end if;
end;


# 情况2:二选一
create procedure test_if2()
begin
	#声明变量 
	declare stu_name varchar(15) default '张三';
	#使用if判断
	if stu_name is null
			then select 'stu_name is null';
	else
			select 'stu_name  is not null';
	end if;
end;

#情况3:多选一
create procedure test_if3()
begin
	#声明变量 
	declare age int default 50;
	#使用if判断
	if age > 40
			then select '中老年';
	elseif age < 40 and age >20
			then select '青年';
	elseif age < 20
			then select '少年';
	else
			select '老年';
	end if;
end;

3.2 CASE

3.2.1 语法

#情况一:类似于switch
CASE表达式
WHEN1 THEN 结果1或语句1(如果是语句,需要加分号)
WHEN2 THEN 结果2或语句2(如果是语句,需要加分号)
ELSE 结果n或语句n(如果是语句,需要加分号)
END [case](如果是放在begin end中需要加上case,如果放在select后面不需要)

#情况二:类似于多重if
CASE
WHEN 条件1 THEN 结果1或语句1(如果是语句,需要加分号)
WHEN 条件2 THEN 结果2或语句2(如果是语句,需要加分号)
ELSE 结果n或语句n(如果是语句,需要加分号)
END [case](如果是放在begin end中需要加上case,如果放在select后面不需要)

3.2.1 举例

#情况1
create procedure test_case()
begin
	declare var int default 2;
	
	case var
		when 1 then select 'var = 1';
		when 2 then select 'var = 2';
		else select 'other var';
	end case;
end;
call test_case2;

#情况2
create procedure test_case2()
begin
	declare var int default 10;
	case 	when var > 100 then select 'var > 100';
				when var > 10 and var < 100 then select '100 > var > 10';
				else select 'other var';
	end case;
end;

4 循环结构

4.1 LOOP

4.1.1 语法

[loop_lable:]LOOP
	循环体执行的语句
END LOOP[loop_lable]

4.1.2 举例

	create procedure test_loop()
	begin
		declare num int default 1;
		
		loop_label:loop
			#重新赋值
			set num = num + 1;
			if num >= 10 then leave loop_label;
			end if;
		end loop loop_label;
		
		#查看
		select num;
	end;
	call test_loop;

4.2 WHILE

4.2.1 语法

[while_label:] WHILE 循环条件 DO
循环体
END WHILE [while_label];

4.2.2 举例

CREATE PROCEDURE test_while () BEGIN
	DECLARE
		num INT DEFAULT 1;
	WHILE
			num <= 10 DO
			#循环体(略)
			SET num = num + 1;#迭代条件
	END WHILE;
	SELECT num;
END;

4.3 REPEAT

4.3.1 语法

[repeat_label:] REPEAT
循环体的语句
UNTIL 结循环的条件表达式
END REPEAT [repeat_label]

4.3.2 举例

CREATE PROCEDURE test_repeat () BEGIN
	DECLARE
		num INT DEFAULT 1;#声明变量
		SET num = num + 1;
	REPEAT		
		UNTIL num >= 10#结束循环的条件,不要加分号
	END REPEAT;
	SELECT
	num;
END;
CALL test_repeat;

4.4 循环结构的四个要素

  • 初始化条件
  • 循环条件
  • 循环体
  • 迭代条件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值