一、流程控制结构分类

  1)顺序结构:程序从上往下依次执行。
  2)分支结构:程序从两条或多条路径中选着一条去执行。
  3)循环结构:程序在满足一定条件的基础上,重复执行一段代码。

二、分支结构

1、if 函数

1)语法

  如果逻辑表达式为 ture,返回表达式 1,否则返回表达式 2。

if(逻辑表达式,表达式1,表达式2);
2)实例
select if(1>2,"1大于2","1小于2");

2、case 结构

1)语法:

  ①类似于 Java 中的 switch 语句,一般用于实现等值判断。

case 变量|表达式|字段
when 要判断的值1 then 返回的值1或语句1;
when 要判断的值2 then 返回的值2或语句2;
...
[else 返回的值n或语句n;]
end [case];

  ②类似于 Java 中的多重 if 语句,一般用于实现区间的判断。

case 
when 要判断的条件1 then 返回的值1或语句1;
when 要判断的条件2 then 返回的值2或语句2;
...
[else 返回的值n或语句n;]
end [case];
2)特点:

  ①如果一个 then 后面为值或者语句其他 then 和 else 后面都必须为值或语句。
  ②如果 then 后面为值,则作为表达式使用,可以放在任何地方。then 和 else 后面都不需要使用分号(;)结尾,结束语句使用 end 而不是 end case。
  ③如果 then 后面为语句,则只能放在 begin end 语句中。 then 和 else 后面必须以分号(;)结尾,结束语句使用 end case 而不是 end。
  ④语法一是将 case 后面的值和 when 后面的值做比较,如果相等执行对应 then 后面值或语句,并结束判断。如果都不相等执行 else 后面的值或语句。
  ⑤语法二是判断每个 when 后面的条件是否成立,成立则执行对应 then 后面值或语句,并结束判断。如果都不成立执行 else 后面的值或语句。
  ⑥ else 可以省略,如果省略且所有条件都不满足,则返回 null。

3)实例

  ①语法一作为表达式使用。

select case if(3>6,4,5)
when 4 then "对"
when 5 then "错"
else "异常"
end;

  ②语法二作为表达式使用。

select  case 
when 5<3 then "错"
when 5>2 then "对"
end;

  ③语法一作为语句使用。

-- 创建一个存储过程。
create procedure zyx(inout value varchar(20))
begin
	case value
	when "a" then set value="zyx";
	when "b" then set value="wmj";
	else set value=".top";
	end case;
end;
-- 创建一个用户变量并调用存储过程,打印结果。
set @value="a";
call zyx(@value);
select @value;

  ④语法二作为语句使用。

-- 创建一个存储过程。
create procedure zyx(out value varchar(20))
begin
	case
	when 3>4 then set value="3>4";
	when 3<4 then set value="3<4";
	else set value="3=4";
	end case;
end;
-- 创建一个用户变量并调用存储过程,打印结果。
set @value="";
call zyx(@value);
select @value;

3、if 结构

1)语法

  用于实现多重分支,只能放在 begin end 中。

if 条件 then 语句1;
elseif 条件2 then 语句2;
....
else 语句n;
end if;
2)实例
-- 创建一个存储过程。
create procedure zyx(out value varchar(20))
begin
	if 3>4 then set value="3>4";
	elseif 3<4  then set value="3<4";
	else set value="3=4";
	end if;
end;
-- 创建一个用户变量并调用存储过程,打印结果。
set @value="";
call zyx(@value);
select @value;

三、循环结构

  循环结构都只能放在 begin end 语句中,标签用于结合循环控制语句使用。

1、while

1)语法

  特点先判断条件是否成立,然后执行语句,条件为false结束循环。

[标签:]while 循环条件 do
	循环体;
end while [标签];
2)实例
create procedure zyx(in value int)
begin
	while value<6 do
		select value;
		set value=value+1;
	end while;
end;

set @value=3;
call zyx(@value);

2、loop

1)语法

  没有判断条件的死循环,只能使用循环控制结束循环。

[标签:]loop
	循环体;
end lopp [标签];
2)实例
create procedure zyx(in value int)
begin
	zyx:loop
		-- leave是循环控制语句,用于结束当前循环体
		if value>6 then leave zyx;end if;
		select value;
		set value=value+1;
	end loop zyx;
end;

set @value=3;
call zyx(@value);

3、repeat

1)语法

  先执行语句后判断条件,条件为true结束循环。

[标签:]repeat
	循环体;
until 结束循环的条件
end repeat[标签];
2)实例
create procedure zyx(in value int)
begin
	repeat
		select value;
		set value=value+1;
		until value>6
	end repeat;
end;

set @value=3;
call zyx(@value);

4、循环控制

  循环控制语句需要和循环语句中的标签结合使用。

1)iterate

  iterate 类似于 Java 中的 continue ,结束当前循环,继续下一次循环。

create procedure zyx(in value int)
begin
	zyx:while value<6 do
		set value=value+1;
		-- 当value等于4时,结束当前循环。
		if value=4 then iterate zyx;end if;
		select value;
	end while zyx;
end;

set @value=3;
call zyx(@value);
2)leave

  leave 类似于 break,结束当前所在的循环结构。

create procedure zyx(in value int)
begin
	zyx:loop
		-- 当value等于6时,结束当前循环结构。
		if value>6 then leave zyx;end if;
		select value;
		set value=value+1;
	end loop zyx;
end;

set @value=3;
call zyx(@value);

标题:MySQL中的流程控制结构
作者:Yi-Xing
地址:http://zyxwmj.top/articles/2019/10/14/1571022318180.html
博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!