语法格式:
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语句
二、CASE语句演示案例
IF val IS NULL THEN SELECT ‘val is NULL’; ELSE SELECT ‘val is not NULL’; END IF;
- 另一个进行条件判断的语句,该语句有两种语句格式
格式一:
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;
三、LOOP语句格式二:
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循环语句,用来重复执行某些语句
- 与IF和CASE语句相比,LOOP只是创建一个循环操作的过程,并不进行条件判断
- LOOP内的语句一直重复执行,直到跳出循环语句(使用leave离开LOOP)
语法格式:
[loop_label:] LOOP Statement_list END LOOP [loop_label]
- 参数:
- Loop_label,表示LOOP语句的标注名称,该参数可以省略
- Statement_list,表示需要循环执行的语句
四、ITERATE语句演示案例
- 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只能用于LOOP、REPEAT、WHILE语句内
- iterate类似于C语言的continue,leave类似于C语言的break
语法格式:
ITERATE lable
- Lable:表示循环的标志
五、REPEAT语句演示案例
- 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_lable:] REPEAT Statement_list UNTIL expr_condition END REPEAT [repeat_lable]
- 参数:
- Repeat_lable:为REPEAT语句的标注名称,该参数是可选的
- REPEAT语句内的语句,或语句群被重复,直至expr_condition为真
六、WHILE语句演示案例
- UNTIL:循环条件。后面不能有分号
DECLARE id INT DEFAULT 0; REPEAT SET id=id+1; UNTIL id>=10; END REPEAT;
- 创建一个带条件判断的循环过程
- 与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;