4.流程控制结构

1.if函数:
    if(表达式1,表达式2,表达式3)
    执行顺序:
        如果表达式1成立,则返回表达式2的值,否则返回表达式3的值
    应用:
        任何地方
        
2.case结构:
       情况1:类似于java中的switch语句,一般用于实现等值判断
       语法:
           CASE 变量|表达式|字段
           WHEN 要判断的值 THEN 返回的值1或者语句1;  注意结尾的分号
           WHEN 要判断的值 THEN 返回的值2或者语句2; 
           ...
           ELSE 要返回的值n或者语句n;
           END CASE;
       
       情况2:类似于java中的多重if判断,一般用于实现区间判断
       语法:
           CASE
           WHEN 要判断的条件1 THEN 返回的值1或者语句1;
           WHEN 要判断的条件2 THEN 返回的值2或者语句2;
           ...
           ELSE 要返回的值n或者语句n:
           END CASE;
   特点:
       1.可以错作为表达式嵌套在其他语句中使用,可以放在任何地方,begin end中或者外边
       2.可以作为独立的语句使用,只能放在begin end中
       3.如果when中的值满足条件成立,则执行对应的then语句,并结束case
       4.如果都不满足,则执行else中的语句或者值
       5.else可以省略,如果else省略,并且所有的when语句都不满足,则返回null;
   
   示例1:传入成绩,90-100返回A,80-90返回B,70-80返回C,其他返回D:
       声明:这是个范围判断,所以使用情况2
        create procedure soure_check(in source int)
        begin 
        	case
            when source>90 then select 'A';
        	when source>80 then select 'B';
        	when source>70 then select 'C';
        	else select 'D';
        	end case;
         end
       调用:
          call soure_check(90);
  示例2:传入90返回A,传入80返回B
       声明:进行等值判断,使用情况1
           create procedure myp7(in num int)
            begin 
            	case num
            	when 90 then select 'a';
            	when 80 then select 'b';
            	else select 'c';
            	end case;
            end
        调用:返回c
            call myp7(60);
            
            
            
3.if结构
    功能:实现多重分支
    语法:
        if 条件1 then 语句1;
        elseif 条件2 then 语句2; 
        ....
        end if;
    案例:根据传入的成绩,来显示等级,比如传入的成绩:90-100,返回的是A,80-90返回的是B,70-80返回的是C,否则返回D
    因为有一个返回值,所以以创建函数的形式来做:
        声明:
            create function testif(source int) returns varchar(20)
            begin
                #多个条件间用and进行连接
            	if source>90 and source <100 then return 'A';
            	elseif source>80 then return 'B';
            	elseif source>70 then return 'C';
            	else return 'D';
               #必须加end if  
            	end if;
            end
        调用:
            select testif(90);
            
            
4.循环结构:
    分类:while、 loop 、repeat
    循环控制:
        1.iterate 类似于continue,继续,结束本次循环,进行下一次
        2.leave 类似于break,跳出,结束当前所在的循环
    
    1.while
        语法:【标签:】可加可不加,不加就是普通循环,加上了可以配合循环控制来使用
            【标签:】 while 循环条件 do
                循环体;
            end while 【标签】;
    
    2.loop:注意loop没有加条条件,所以可以模拟死循环,并且配置leave跳出循环
        语法:
            【标签:】 loop
                循环体;
            end loop 【标签】;
        
    3.repeat:类似于java中do while
       语法:
           【标签:】  repeat
               循环体;
           until 结束循环的条件;
           
1案例:批量插入,根据传入的数值,确定需要插入的次数
    声明:
        CREATE PROCEDURE pro_while ( IN count INT ) 
        BEGIN
           #定义其实变量 
        	DECLARE i INT DEFAULT 1;
           #while循环结构
        	WHILE 
                 i < count DO
        		INSERT INTO USER name,age
        		VALUES
        			(CONCAT( '吴孟达', i ), i );
               #变量+1
        		SET i = i + 1;
        	END WHILE;#结束循环
        END
    调用
    call pro_while(100);

2案例:配合leave使用(相当于break),根据次数插入到admin表中多条记录,如果次数大于20则停止
    声明:
        CREATE PROCEDURE test_while ( IN count INT ) BEGIN
          #定义其实变量  
        	DECLARE
        		i INT DEFAULT 0;
          #定义while循环的标签
        	a :WHILE
        			i < count DO 
                   #循环体
        			INSERT INTO `user` ( NAME, age ) VALUES ( concat( '吴孟达', i ), i ); 
                   #if判断
        			IF i >= 20 THEN
                       #leave while标签
        				LEAVE a;
                   #结束if判断 
        			END IF;
                   #局部变量+1
        			set i=i+1;
           #结束while循环
        	END WHILE a;
        END
    调用:只插入了20条当到20时,跳出循环
        call test_while(100);
        
3.案例3:配合iterate使用(相当于continue),只插入偶数条,奇数的不插
    声明:
     CREATE DEFINER=`root`@`%` PROCEDURE `test_interate`( IN count INT )
         BEGIN
           #声明变量  
        	DECLARE i INT DEFAULT 0;
        	a:while i<count do
               #变量的赋值和必须在使用前,如果把这句放在末尾,会卡住!
        		set i=i+1;
               #这时i有了起始值,再进行使用!mod取余函数
        		if mod(i,2)!=0 then iterate a;
        		end if;
        		insert into user(name,age) values(concat('吴孟达',i),i);
        	end while a;
        END  
    调用:
        call test_interate(100);

posted @ 2022-05-25 20:43  努力的达子  阅读(29)  评论(0编辑  收藏  举报