mysql(while,repeat,loop) 循环语句的使用

学习目标:

掌握 mysql循环语句的使用


学习内容:

  1. while循环
  2. repeat循环
  3. loop

代码实例:

1.while 循环条件  do   #执行循环的条件
      循环体语句;        #必须含有修改循环条件的语句
    end while;
1:如果成绩表SC中存在不及格学生的成绩,将所有学生的成绩在原来的基础上提高5%,直到表中不再存在不及格学生为止。
    -- 分析
    select * from sc where degree<60;
    update sc set degree=degree*1.05;
    -- 1
    if  exists(select * from sc where degree<60)  then 
        update sc set degree=degree*1.05;
    end if;
    -- 2
    desc sc;
    declare cj decimal(28,0);
    select cj=(select min(degree) from sc);
    if cj<60 then 
        update sc set degree=degree*1.05;
    end if;
    -- 编程
    delimiter //
    create procedure rw1()
    begin
        set @cj=(select min(degree) from sc);
        while @cj<60 do
            update sc set degree=degree*1.05;
            set @cj=(select min(degree) from sc);
        end while;
    end //
    delimiter ;
    call rw1();

   任务一: 用WHILE…END WHILE语句求1…100的所有奇数之和。

方法一:
    delimiter //
    create procedure rw2()
    begin
        set @s=0,@i=1;
        while @i<=100 do
            if @i%2<>0 then
                set @s=@s+@i;
            end if;
            set @i=@i+1;
        end while;
        select @s as '1…100的所有奇数之和';
    end //
    delimiter ;
    call rw2();        
    
  方法二:  
   delimiter //
    create procedure rw3()
    begin
        set @s=0,@i=1;
        while @i<=100 do
            set @s=@s+@i;
            set @i=@i+2;
        end while;
        select @s as '1…100的所有奇数之和';
    end //
    delimiter ;
    call rw3();

    2.repeat 循环
    repeat 
         循环体语句;
   until 条件   #退出循环的条件
    end repeat;     
    
例  1:如果成绩表SC中存在不及格学生的成绩,将所有学生的成绩在原来的基础上提高5%,直到表中不再存在不及格学生为止。
select * from sc;
    delimiter //
    create procedure rw4()
    begin
    select min(degree) into @cj  from sc;
    repeat
        update sc set degree=degree*1.05;
      select min(degree) into @cj  from sc;
        until @cj>=68
    end repeat;
    end //
    delimiter ;
    call rw4();

    3.loop循环
标签名:loop
        循环体语句;
      if 条件  then  #退出循环的条件
             leave 标签名;
      end if;    
    end loop;
    1:如果成绩表SC中存在不及格学生的成绩,将所有学生的成绩在原来的基础上提高5%,直到表中不再存在不及格学生为止。

    delimiter //
    create procedure rw5()
    begin
    www:loop
            update sc set degree=degree*1.05;
        select min(degree) into @cj  from sc;
            if @cj>88 then
                leave www;
            end if;
         end loop;
    end //
    
    delimiter ;
    call rw5();

你可能感兴趣的:(开发语言,mysql,数据库)