学习目标:
掌握 mysql循环语句的使用
学习内容:
while循环repeat循环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();