MySQL流程控制语句

在存储过程和函数中实现比较复杂的业务时,需要对应的流程控制来控制,类似Java的分支和循环语句,MySQL也有对应的语句。

语句结构 说明
顺序结构 顺序从上往下依次执行
分支结构 顺序按条件进行选择执行
循环结构 程序满足一定条件下,重复执行一组语句

针对MySQL的流程控制语句主要有3类,用于存储程序。

语句类型 说明
条件判断语句 IF语句和CASE语句
循环语句 LOOP、WHILE和REPEAT语句
跳转语句 ITERATE 和 LEAVE语句

1、IF语句

根据不同的条件|值执行不同的语句,IF语句语法如下:

if condition1 then 执行1
if condition2 then 执行2
...
if conditionN then 执行n
else 执行m
end if

其实if函数也是有这样功能,if(表达式1,表达式2,表达式3):执行顺序,如果表达式1成立,则if函数返回表达式2的值,否则返回表达式3的值

可以学习: MySQL常用函数大全

delimiter $
create procedure girls.demo5(IN scores float, OUT tip varchar(20))
begin
    IF scores < 60 THEN
        set tip = '不及格,加油';
    ELSEIF scores >= 60 and scores < 70 THEN
            set tip = '一般噢';
    ELSEIF scores >= 70 and scores < 80 THEN
                set tip = '良好';
    ELSEIF scores >= 80 and scores < 90 THEN
                    set tip = '优秀';
    ELSE
                    set tip = '非常优秀';
    END IF;
end$
delimiter ;

call demo5(80,@tip);
select @tip;

2、CASE语句

CASE语句是分支语句结构,语法如下:
情况1:类似Java中的switch语句,一般用于等值判断

CASE 变量|表达式|字段
when 要判断的值 then 返回的值1或者语句1;
when 要判断的值 then 返回的值2或者语句2;
...
ELSE 要判断的值n或者语句n;
END CASE;

案例:

-- 创建存储过程
delimiter $
CREATE PROCEDURE girls.example_case(IN x INT)
BEGIN
	CASE x
		WHEN 1 THEN SELECT 1;
		WHEN 2 THEN SELECT 2;
		ELSE SELECT 3;
	END CASE;
END$;
 delimiter ;
-- 调用存储过程
CALL example_case(5);

情况2:类似Java中的多重IF语句,一般用于实现区间判断

CASE
when 要判断的条件1 then 返回的值1或者语句1;
when 要判断的条件2 then 返回的值2或者语句2;
...
ELSE  返回的值n或者语句n;
END CASE;

案例:

delimiter $
create procedure girls.demo6(IN scores float, OUT tip varchar(20))
begin
    case
        when scores < 60 then set tip = '不及格';
        when scores >= 60 and scores < 70 then set tip = '一般';
        when scores >= 70 and scores < 80 then set tip = '良好';
        when scores >= 80 and scores < 90 then set tip = '优秀';
        else set tip = '非常优秀';
    end case;
end$
delimiter ;

call demo6(80,@tip);
select @tip;

3、LOOP循环语句

LOOP循环语句用来重复执行某些语句,LOOP语句语法如下:

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

loop_label:表示LOOP语句的标注名称,该参数可以省略,可以用于跳出循环。

delimiter $
create procedure girls.test_loop(OUT sum INT)
begin
    declare i int default 1;
    declare s int default 0;
    loop_label1:
    loop
        if i > 100 then
            leave loop_label1; # 跳出循环
        end if;
        set s = s + i;
        set i = i + 1;
    end loop;
    set sum = s;
end $
delimiter ;
call test_loop(@sum);
select @sum;

编写时候,参照Java的for循环语句:

for(int i = 1; i <=100;i++){
  sum  = sum + i;
}

4、WHILE循环语句

首先判断condition条件是否为真,如果是则执行循环体,否则退出循环。该语法表示形式如下:

WHILE condition DO
...
END WHILE;

案例:计算前1+2+3+…+100的和:

-- 创建存储过程
CREATE PROCEDURE example_while(OUT sum INT)
BEGIN
	DECLARE i INT DEFAULT 1;
	DECLARE s INT DEFAULT 0;
 
	WHILE i <= 100 DO
		SET s = s+i;
		SET i = i+1;
	END WHILE;
 
	SET sum = s;
END;
 
-- 调用存储过程
CALL example_while(@sum);
SELECT @sum;

你可能感兴趣的:(MySQL,mysql,java,数据库)