根据尚硅谷的视频教程学习MySQL,学习记录-16 -流程控制结构。
顺序结构:程序从上往下依次执行
分支结构:程序从两条或多条路径中选择一条去执行
循环结构:程序在满足一定条件的基础上,重复执行一段代码
一、分支结构
- if 函数: 实现简单的双分支,应用在任何地方
IF(表达式1,表达式2,表达式3)
#执行顺序:如果表达式1成立,则IF函数返回表达式2的值,否则返回表达式3的值
- case结构
一般用于实现等值判断,或者区间判断
#等值判断
CASE 变量 |表达式 | 字段
WHEN 要判断的值 THEN 返回的值1
WHEN 要判断的值 THEN 返回的值2
...
ELSE 返回的值n
END CASE
#区间判断
CASE
WHEN 要判断的条件1 THEN 返回的值1
WHEN 要判断的条件2 THEN 返回的值2
....
ELSE 要返回的值n
END 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)
BEGIN
CASE
WHEN 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 CHAR
BEGIN
IF 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)
BEGIN
DECLARE total INT DEFAULT 0;
REPEAT
SET total = total +n;
SET n = n-1;
UNTIL n=0
END REPEAT;
SELECT total;
END
#调用存储过程
CALL pro_test(9);