zoukankan      html  css  js  c++  java
  • 流程控制

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

    一.分支结构

    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
  • 相关阅读:
    P1030 求先序排列 P1305 新二叉树
    spfa
    Clairewd’s message ekmp
    Cyclic Nacklace hdu3746 kmp 最小循环节
    P1233 木棍加工 dp LIS
    P1052 过河 线性dp 路径压缩
    Best Reward 拓展kmp
    Period kmp
    Substrings kmp
    Count the string kmp
  • 原文地址:https://www.cnblogs.com/xufengnian/p/11872199.html
Copyright © 2011-2022 走看看