一、IF语句

语法格式:

IF expr_condition THEN statement_list 
    [ELSEIF expr_condition THEN statement_list] 
    [ELSE statement_list] 
END IF;
  • 参数:
    • Expr_condition:表示判断条件 
    • Statement_list:表示SQL语句列表,它可以包括一个或多个语句
  • 注意事项:

    • if以end if结尾
    • 如果,expr_condition求值为TRUE,相应的SQL语句列表就会被执行,如果,没有expr_condition匹配,则ELSE子句李的语句列表被执行
    • 注意,MySQL中还有一个IF()函数,不同于这里的IF语句

 演示案例

IF val IS NULL 
  THEN SELECT ‘val is NULL’; 
  ELSE SELECT ‘val is not NULL’; 
END IF; 
二、CASE语句
  • 另一个进行条件判断的语句,该语句有两种语句格式

格式一:

CASE case_expr 
    WHEN when_value THEN statement_list 
    [WHEN when_value THEN statement_list]…… 
    [ELSE statement_list] 
END CASE
  • 参数:
    • Case_expr,表示条件判断的表达式,决定了哪一个WHEN自己会被执行 
    • When_value,表示表达式可能的值,如果,某个when_value表达式与case_expr表达式结果相同,则执行对应THEN关键字后的statement中的语句 
    • Statement_list,表示不同when_value值的执行语句

演示案例

CASE val 
   WHEN 1 THEN SELECT ‘val is 1’; 
   WHEN 2 THEN SELECT ‘val is 2’; 
   ELSE SELECT ‘val is not 1 or 2’; 
END CASE;

格式二:

CASE 
     WHEN expr_condition THEN statement_list 
     [WHEN expr_condition THEN statement_list] 
     [ELSE statement_list] 
END CASE;
  • 注意,这里介绍的用在存储过程中的CASE语句,与控制流程函数中的SQL CASE表达式中的CASE是不同的 。存储过程中,CASE语句不能有ELSE NULL子句,并且,用END CASE代替END来终止

演示案例

CASE 
   when val is null then select 'val is null';
   when val<0 then select 'val is less then 0';
   when val>0 then select 'val is greater than 0';
   else select 'val is 0';
end case;
三、LOOP语句
  • LOOP循环语句,用来重复执行某些语句
  • 与IF和CASE语句相比,LOOP只是创建一个循环操作的过程,并不进行条件判断
  • LOOP内的语句一直重复执行,直到跳出循环语句(使用leave离开LOOP)

语法格式: 

[loop_label:] LOOP 
   Statement_list 
END LOOP [loop_label]
  • 参数:
    • Loop_label,表示LOOP语句的标注名称,该参数可以省略 
    • Statement_list,表示需要循环执行的语句

演示案例

  • Add_loop:LOOP循环名,自定义 
DECLARE id INT DEFAULT 0; 
add_loo:LOOP 
SET id=id+1; 
  IF id>=10 THEN LEAVE add_loop; 
  END IF; 
END LOOP add_loop;
四、ITERATE语句
  • 用于将执行顺序转到语句段的开头处
  • iterate只能用于LOOP、REPEAT、WHILE语句内
  • iterate类似于C语言的continue,leave类似于C语言的break

语法格式: 

ITERATE lable
  • Lable:表示循环的标志

演示案例

  • P1的初始值为0,如果,p1的值小于10时,重复执行p1加1的操作,当p1大于或等于10,并且小于20时,打印消息p1 is between 10 and 20,当p1大于20时,退出循环
CREATE PROCEDURE doiterate() 
BEGIN 
DECLARE p1 INT DEFAULT 0; 
my_loop:LOOP 
   SET p1=p1+1; 
   IF p1<10 THEN ITERATE my_loop; 
   ELSEIF p1>20 THEN LEAVE my_loop; 
   END IF; 
   SELECT ‘p1 is between 10 and 20’; 
END LOOP my_loop; 
END
五、REPEAT语句
  • 用于创建一个带有条件判断的循环过程 
  • 每次语句执行完毕之后,会对条件表达式进行判断,如果表达式为真,则循环结束,否则,重复执行循环中的语句

语法格式: 

[repeat_lable:] REPEAT 
   Statement_list 
UNTIL expr_condition 
END REPEAT [repeat_lable]
  • 参数:
    • Repeat_lable:为REPEAT语句的标注名称,该参数是可选的 
  • REPEAT语句内的语句,或语句群被重复,直至expr_condition为真

演示案例

  • UNTIL:循环条件。后面不能有分号 
DECLARE id INT DEFAULT 0; 

REPEAT 
SET id=id+1; 
UNTIL id>=10; 
END REPEAT;
六、WHILE语句
  • 创建一个带条件判断的循环过程 
  • 与REPEAT不同的是,WHILE在语句执行时,先对指定的条件进行判断,如果为真,则执行循环内的语句,否则退出循环

语法格式: 

[while_lable:] WHILE expr_condition DO 
Statement_list 
END WHILE [while_lable]
  • 参数:
    • While_lable:为WHILE语句的标注名称 
    • Expr_condition:为进行判断的表达式,如果表达式为真,WHILE语句内的语句,或语句群就被执行,直至expr_condition为假,退出循环

演示案例

DECLARE i INT DEFAULT 0; 
WHILE i<10 DO 
SET i=i+1; 
END WHILE;