• 流程控制


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

    一.分支结构

    1.1 if函数

    功能:实现简单的双分支
    语法:
    select if(表达式1,表达式2,表达式3)
    执行顺序:
    如果表达式1成立,则if函数返回表达式2的值,否则返回表达式3的值
    use myemployees;
    select if(10<5,"大","小");
    select last_name,commission_pct,if(commission_pct is null,"没奖金嘻嘻","有奖金呵呵") 备注 from employees;
    应用:任何地方
    View Code

    1.2 case

    情况1:类似于java中的switch语句,一般用于实现等值判断
    语法:
        case 变量|表达式|字段
        when 要判断的值1 then 返回的值1
        when 要判断的值2 then 返回的值2
        when 要判断的值3 then 返回的值3
        ...
        else 要返回的值n
        end
    
    例:
    use myemployees;
    select salary     原始工资,
           department_id,
           case department_id
               when 30 then salary * 1.1
               when 40 then salary * 1.2
               when 50 then salary * 1.3
               else salary
               end as 新工资
    from employees;
        
    情况2:类似于java中的多重if语句,一般用于实现区间判断
    case 
    when 要判断的条件1 then 返回的值1
    when 要判断的条件2 then 返回的值2
    when 要判断的条件3 then 返回的值3
    ...
    else 要返回的值n或语句n;
    end
    
    
    特点:
        1.
        可以作为表达式,嵌套在其他语句中使用,可以放在任何地方,
        可以作为独立的语句去使用,只能放在begin end中
        2.
        如果when中值满足或条件成立,则执行对应的then后面的语句,并且结束case
        如果都不满足,则执行else中的语句或值
        3.
        else可以省略,如果else省略了,并且所有when条件都不满足,则返回null
    
    #案例
    #创建存储过程,根据传入的成绩,来显示等级,比如传入的成绩:90-100,显示A;80-90,显示B;60-80,显示C,否则,显示D
    use myemployees;
    delimiter $
    create procedure test_case(in score int)
    begin
        case
        when score>=90 then select 'A';
        when score>=80 then select 'B';
        when score>=60 then select 'C';
        else select "D";
        end case;
    end $
    View Code

    2.if结构

    功能:实现多重分支
    语法:
        if 条件1 then 语句1;
        elseif 条件2 then 语句2;
        ...
        else 语句n;
    注意:只能应用在begin end中
    #案例
    #创建存储过程,根据传入的成绩,来显示等级,比如传入的成绩:90-100,显示A;80-90,显示B;60-80,显示C,否则,显示D
    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>=60  then return "C";
        else  return "D";
        end if ;
    end $
    select test_if(50);
    View Code

    二、循环结构

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

    1.while

    语法:
        
        [标签:] while 循环条件 do 
        循环体;
        end while [标签];
    View Code

    2.loop

    语法:
        [标签:] loop
        循环体;
        end loop [标签];
    可以用来模拟简单的死循环
    View Code

    3.repeat

    语法:
        [标签:] repeat
        循环体;
        until 结束循环的条件
        end repeat [标签];
    View Code

    4.案例

    4.1没有添加循环控制语句
    #案例:批量插入,根据次数插入到admin表中多条记录
    use girls;
    delimiter $
    create procedure pro_while(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_while(100);
    
    4.2添加循环控制语句
    leave表示离开循环,相当于break
    iterate则继续循环,相当于continue
    leave语句
    #案例2:批量插入,根据次数插入到admin表中多条记录,如果次数>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),"0000");
            if i>=20 then leave a;
            end if;
            set i=i+1;
        end while a;
    end $
    call test_while2(50);
    
    
    iterate语句
    #案例:批量插入,根据次数插入到admin中多条记录,只插入偶数次
    delimiter $
    create procedure  test_while3(in insertCount int)
    begin
        declare i int default 1;
        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("lixian",i),"9527");
        end while a;
    end $
    call test_while3(50);
    View Code

    5.练习

    #1.已知表stringcontent其中字段:id自增长,content varchar(20)
    #向该表插入指定个数的随机字符串
    use girls;
    drop table if exists stringcontent;
    create table stringcontent(
        id int primary key auto_increment,
        content varchar(20)
    );
    delimiter $
    create procedure test_randstr_insert(in insertCount int)
    begin
        declare i int default 1;#定义一个循环变量i,插入次数
        declare str varchar(26) default "abcdefghijklmnopqrst";
        declare startIndex int default 1;#代表起始索引
        declare len int default 1;#代表截取的字符的长度
        while i<insertCount do
            set len=floor(rand()*(20-startIndex+1)+1);#产生一个随机的整数,代表截取长度,1-(26-startIndex+1)
            set startIndex=floor(rand()*26+1);#产生一个随机的整数,代表其实索引1-26
            insert into stringcontent(content) values (substr(str,startIndex,len));
            set i=i+1;#循环变量更新
            end while;
    end $
    call test_randstr_insert(20);
    View Code
  • 相关阅读:
    java第四次作业
    JAVA第三次作业
    Java第二次作业
    Java第一次作业
    android studio下载
    Android面试常问到的知识点
    [Java基础]List,Map集合总结
    搞ACM的你伤不起[转自RoBa]------(看一次,笑一次)
    06.5.1.Functions
    05.virsh命令的常用操作(kvm)
  • 原文地址:https://www.cnblogs.com/xufengnian/p/11872199.html
Copyright © 2020-2023  润新知