功能:实现简单的双分支
语法 SELECT IF(表达式1,表达式2,表达式3)
执行顺序: 如果表达式1成立,则if函数返回表达式2的值,否则返回表达式3的值
应用: 任何地方
情况1:类似于java中的switch语句,一般用于实现等值判断 语法: CASE 变量|表达式|字段 WHEN 要判断的值 THEN 返回的值1或语句1; WHEN 要判断的值 THEN 返回的值2或语句2; … ELSE 要返回的值n或语句n; END CASE;
情况2:类似于java中的多重if语句,一般实现区间判断 CASE WHEN 要判断的条件1 THEN 返回的值1或语句1; WHEN 要判断的条件2 THEN 返回的值2或语句2; … ELSE 要返回的值n或语句n; END CASE;
特点: ① 可以作为表达式,嵌套在其他语句中使用,可以放在任何地方 可以作为独立的语句去使用,只能放在begin end中 ② 如果when中的值或条件成立,则执行对应的then后面的语句,并且结束case 如果都不满足,则执行else中的语句或值 ③else可以省略,如果else省略了,并且所有when条件都不满足,则返回null
案例 创建存储过程,根据传入的成绩,来显示等级,比如传入的成绩,90-100显示A,80-90显示B,60-80显示C,否则显示D
USE student; DROP PROCEDURE level_score delimiter $ CREATE PROCEDURE level_score(IN score INT) BEGIN CASE WHEN 100>=score AND score>=90 THEN SELECT 'A'; WHEN score>=80 THEN SELECT 'B'; WHEN score>=60 THEN SELECT 'C'; ELSE SELECT 'D'; END CASE; END$ CALL level_score(84)功能:实现多重分支
语法: if 条件1 THEN ELSEIF 条件2 THEN 语句2 … [ELSE 语句n] END IF
应用:begin end中
案例:创建存储过程,根据传入的成绩,来显示等级,比如传入的成绩,90-100返回A,80-90返回B,60-80返回C,否则返回D
DROP FUNCTION level delimiter $ CREATE FUNCTION level_grade(grade INT) RETURNS CHAR BEGIN IF 100>=grade AND grade>=90 THEN RETURN 'A'; ELSEIF grade>=80 THEN RETURN 'B'; ELSEIF grade>=60 THEN RETURN 'C'; ELSE RETURN 'D'; END if; END$ SELECT level_grade(22);分类: WHILE、LOOP、REPEAT
循环控制:
iterate类似于continue,结束本次循环,继续下一次leave类似于break,结束当前所在循环语法: [标记]:WHILE 循环条件 DO 循环体; END WHILE [标记];
联想: while(循环条件) BEGIN 循环体; }
语法 [标记:]LOOP 循环体; END LOOP [标记];
可以用来模拟简单的死循环
语法: [标记:] REPEAT 循环体; UNTIL 结束循环的条件 END REPEAT [标记];
1.不添加leave语句 案例:批量插入,根据次数插入到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)2.添加leave语句 案例:批量插入,根据次数插入到admin表中多条记录,如果次数>20则停止
TRUNCATE TABLE admin DROP PROCEDURE pro_while delimiter $ CREATE PROCEDURE pro_while(IN insertCount INT) BEGIN DECLARE i INT DEFAULT 1; a:WHILE i<=insertCount DO INSERT INTO admin(username,password) VALUES(CONCAT('rose',i),'666'); SET i = i+1; IF i>20 THEN LEAVE a; END IF; END WHILE a; END $ CALL pro_while(100)案例:批量插入,根据次数插入到admin表中多条记录,只插入偶数次
use girls delimiter $ CREATE PROCEDURE pro_while(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('rose',i),'666'); END WHILE a; END $ TRUNCATE TABLE admin CALL pro_while(100)