一:分支结构

(1)case结构

  1. #一:分支函数
  2. #1.if函数
  3. /*
  4. 功能:实现简单的双分支
  5. If(表达式1,表达式2,表达式3)
  6. 执行顺序:
  7. 如果表达式1成立,则if函数返回表达式2的值,否则返回表达式3的值。
  8. 应用:任何地方。
  9. */
  10. #2.case结构
  11. #情况1:类似于switch语句,可以实现等值判断
  12. /*
  13. case 变量|表达式|字段
  14. when 值1 then 返回的值1或语句1;
  15. when 值2 then 返回的值1或语句1;;
  16. ……
  17. else 返回的值n或语句n;
  18. end case;
  19. */
  20. #情况2:类似于多重IF语句,可以实现区间判断(无表达式)
  21. /*
  22. case
  23. when 条件1 then 返回的值1或语句1;
  24. when 条件2 then 返回的值1或语句1;
  25. ……
  26. else 返回的值n或语句n
  27. end case;
  28. */
  29. /*
  30. 特点:
  31. (1)
  32. 可以作为表达式,嵌套在其他语句中使用,可以放在任何地方,begin end中或begin end的外面。
  33. 可以作为独立的语句去使用,只能放在begin end中。
  34. (2)
  35. else可以省略,如果else省略了,并且所有的when条件都不满足,则返回null.
  36. */
  37. #案例:创建存储过程,根据传入的成绩来显示等级,比如传入的成绩:90-100,显示A,80-90,显示B,70-80,显示C,否则,显示D。
  38. CREATE PROCEDURE test_case(IN score INT)
  39. BEGIN
  40. CASE
  41. WHEN score BETWEEN 90 AND 100 THEN SELECT 'A';
  42. WHEN score BETWEEN 80 AND 90 THEN SELECT 'B';
  43. WHEN score BETWEEN 70 AND 80 THEN SELECT 'C';
  44. ELSE SELECT 'D';
  45. END CASE;
  46. END $
  47. CALL test_cas(95) $

(2)if结构

  1. #if结构
  2. /*
  3. 语法:
  4. if 条件1 then 语句1;
  5. elseif 条件2 then 语句2;
  6. ………………
  7. 【else 语句n】
  8. end if;
  9. 只能应用在begin end中。
  10. */
  11. #案例:根据传入的成绩,来返回等级,比如传入的成绩:90-100,返回A,80-90,返回B,70-80,返回C,否则,返回D。
  12. create function test_id(score int) returns char
  13. begin
  14. if score BETWEEN 90 AND 100 THEN return 'A';
  15. elseIF score BETWEEN 80 AND 90 THEN RETURN 'B';
  16. ELSEIF score BETWEEN 70 AND 80 THEN RETURN 'C';
  17. ELSE RETURN 'D';
  18. END if;
  19. end $
  20. select test_if(86)$

二:循环结构

(1)三种循环概述

  1. #循环结构
  2. /*
  3. 分类:
  4. while
  5. loop
  6. repeat
  7. 循环控制:
  8. iterate:类似于continue,继续,结束本次循环,继续下一次循环
  9. leave:类似于break,跳出,结束当前所在的循环
  10. */
  11. #1.while
  12. /*
  13. 语法:
  14. 【标签:】while 循环条件 do
  15. 循环体;
  16. end while 【标签】;
  17. */
  18. #2.loop
  19. /*
  20. 语法:
  21. 【标签:】loop
  22. 循环体;
  23. end loop 【标签】;
  24. 可以用来模拟死循环(无条件)
  25. */
  26. #3.repeat(类似于do……while)
  27. /*
  28. 语法:
  29. 【标签:】repeat
  30. 循环体;
  31. until 结束循环的条件
  32. end repeat 【标签】;
  33. 可以用来模拟死循环(无条件)
  34. */

(2)while循环

  1. #1.while循环
  2. /*
  3. 语法:
  4. 【标签:】while 循环条件 do
  5. 循环体;
  6. end while 【标签】;
  7. */
  8. #案例:批量插入,根据次数插入到admin表中多条记录(没有添加循环控制语句,此时可以不用加标签)
  9. CREATE PROCEDURE pro_while1(IN insertCount INT)
  10. BEGIN
  11. DECLARE i INT DEFAULT 1;
  12. a:WHILE i<=insertCount DO
  13. INSERT INTO `admin`(username,`password`) VALUES(CONCAT('zjl',i),'666');
  14. SET i=i+1;
  15. END WHILE a;
  16. END $
  17. CALL pro_while1(100) $
  18. #案例:批量插入,根据次数插入到admin表中多条记录,如果次数大于20则停止(添加循环控制语句,此时必须加标签)
  19. CREATE PROCEDURE pro_while2(IN insertCount INT)
  20. BEGIN
  21. DECLARE i INT DEFAULT 1;
  22. a:WHILE i<=insertCount DO
  23. INSERT INTO `admin`(username,`password`) VALUES(CONCAT('周杰伦',i),'666');
  24. IF i>=20 THEN LEAVE a; #标签的作用
  25. SET i=i+1;
  26. END IF;
  27. END WHILE a;
  28. END $
  29. CALL pro_while2(100) $