根据尚硅谷的视频教程学习MySQL,学习记录-16 -流程控制结构。
顺序结构:程序从上往下依次执行
分支结构:程序从两条或多条路径中选择一条去执行
循环结构:程序在满足一定条件的基础上,重复执行一段代码
一、分支结构
- if 函数: 实现简单的双分支,应用在任何地方
IF(表达式1,表达式2,表达式3)#执行顺序:如果表达式1成立,则IF函数返回表达式2的值,否则返回表达式3的值
- case结构
一般用于实现等值判断,或者区间判断
#等值判断CASE 变量 |表达式 | 字段WHEN 要判断的值 THEN 返回的值1WHEN 要判断的值 THEN 返回的值2...ELSE 返回的值nEND CASE#区间判断CASEWHEN 要判断的条件1 THEN 返回的值1WHEN 要判断的条件2 THEN 返回的值2....ELSE 要返回的值nEND CASE
1 可以做为表达式,嵌套在其他语句中使用,可以放在任何地方,BEGIN END 中或者BEGIN END 外面
2 可以作为独立的语句使用,只能放在BEGIN END中
3 如果WHEN中的值或者条件满足,则执行对应的THEN后面的语句,并且结束CASE;如果都不满足,则执行ELSE中的语句或者
4 else可以省略,如果ELSE省略了并且所有when个条件都不满足,则返回NULL
案例:创建存储过程,根据传入的成绩,显示等级。比如:传入成绩在90-100,显示A,在80-90 显示B,60-80 显示C,否则显示D
CREATE PROCEDURE test_case(IN score INT)BEGINCASEWHEN score >=90 AND score <=100 THEN SELECT \'A\';WHEN score >=80 AND score< 90 THEN SELECT \'B\';WHEN score >=60 AND score< 80 THEN SELECT \'C\';ELSE SELECT \'D\';END CASE;END#调用存储过程CALL test_case(95);
- if 结构实现多重分支
IF 条件1 THEN 语句1;ELSEIF 条件2 THEN 语句2;...【ELSE 语句n;】END IF;只能应用在BEGIN END 中
案例:创建函数,根据传入的成绩,显示等级。比如:传入成绩在90-100,返回A,在80-90 返回B,60-80 返回C,否则返回D
CREATE FUNCTION test_if(score INT) RETURNS CHARBEGINIF score >=90 AND score <=100 THEN RETURN \'A\';ELSEIF score >=80 AND score< 90 THEN RETURN \'B\';ELSEIF score >=60 AND score< 80 THEN RETURN \'C\';ELSE RETURN \'D\';END IF;END#调用函数SELECT test_if(65);
二、循环结构
分类:while、loop、repeat,只能放在begin end 中
循环控制:
iterate 类似于continue,继续,结束本次循环继续下一次
leave 类似于break,跳出,结束当前所在的循环
- while – 先判断后执行
【标签:】WHILE 循环条件 DO循环体;END WHILE 【标签】;
- loop – 可以用来模拟简单的死循环,没有条件的死循环
【标签:】LOOP循环体;END LOOP 【标签】;
- repeat – 先执行后判断
【标签:】repeat循环体;UNTIL 结束循环的条件END REPEAT 【标签】;
对比
1 三种循环都可以省略名称,但如果循环中添加了循环控制语句(leave或iterate)则必须添加名称
2 loop 一般用于实现简单的死循环 ; while 先判断后执行 ; repeat 先执行后判断,至少执行一次
案例:使用repeat循环结构计算从1加到n
CREATE PROCEDURE pro_test(n INT)BEGINDECLARE total INT DEFAULT 0;REPEATSET total = total +n;SET n = n-1;UNTIL n=0END REPEAT;SELECT total;END#调用存储过程CALL pro_test(9);