MySQL基础之流程控制(十一)

    技术2022-07-12  97

    流程控制结构

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

    一、分支结构 1.if函数 功能:实现简单的双分支。

    语法: select if(表达式1,表达式2,表达式3) 执行顺序:如果表达式1成立,则if返回表达式2的值,反之返回表达式3的值。 应用:任何地方

    2.case结构

    情况1:类似于java中的switch语句,一般用于实现等值判断。 语法: case 变量|表达式|字段 when 要判断的值1 then 返回的值1 when 要判断的值2 then 返回的值2 . . . else 要返回的值n end 情况2:类似于Java中的多重if语句,一般用于实现区间判断。 语法: case when 要判断的条件1 then 返回的值1 when 要判断的条件2 then 返回的值2 . . . else 要返回的值n end 特点: 1.可以作为表达式,嵌套在其他语句中使用,可以放在任何地方,begin end 中或begin end2.可以作为独立的语句去使用,只能放在begin end3.如果when中的值满足或条件成立,则执行对应的then后面的语句,并且结束case,如果都不满足,则执行else中的语句或值 4.else可以省略,如果else省略了,并且所有when条件都不满足,则返回null 案例: delimiter $ create PROCEDURE test_case(in score int) begin case when score>=90 and score<=100 then select 'A'; when score>=80 then select 'B'; when score>=60 then select 'C'; else select 'D'; end case; end $ call test_case(97) $

    3.if结构

    语法: if 条件1 then 语句1elseif 条件2 then 语句2...else 语句n;end if; 应用:在begin end 中。 案例1: delimiter $ create function test_if(score int) RETURNS char begin if score>=90 and score<=100 then return 'A'; elseif score>=80 then return 'B'; elseif score>=70 then return 'C'; else return 'D'; end if; end $ select test_if(85) $

    二、循环结构 分类: while、loop、repeat 循环控制: iterate类似于continue,结束本次循环,继续下一次 leave类似于break,跳出,结束当前所在循环

    1.while 语法: 【标签:】 while 循环条件 do 循环体; end while【标签】; 2.loop 语法: 【标签:】loop 循环体; end loop 【标签】; 可以用来模拟简单的死循环 3.repeat 语法: 【标签:】 repeat 循环体; until 结束循环的条件 end repeat 【标签】; 案例1:批量插入到admin表中 delimiter $ CREATE PROCEDURE pro(in insertCount int) begin DECLARE i int DEFAULT 1; while i<=insertCount do insert into admin(username,PASSWORD) values(concat('rose',i),'666'); set i=i+1; end while; end $ call pro(10) $; select * from admin $; 案例2:次数>20停止 delimiter $ CREATE PROCEDURE test_while2(in insertCount int) begin DECLARE i int DEFAULT 1; a:while i<=insertCount do insert into admin(username,PASSWORD) values(CONCAT('xiaohua',i),'8888'); if i>=20 then leave a; end if; set i=i+1; end while a; end $ call test_while2(100) $ select * from admin$ 案例3:添加iterate语句,只插入偶数次 delimiter $ CREATE PROCEDURE test_iterate(in insertCount int) begin DECLARE i int DEFAULT 0; a:while i<=insertCount do set i=i+1; if mod(i,2)!=0 then ITERATE a; end if; insert into admin(username,PASSWORD) values(CONCAT('hahha',i),'7777'); end while a; end $ call test_iterate(100)$ select * from admin $
    Processed: 0.010, SQL: 9