首页 > 编程笔记 > MySQL笔记 阅读:53

MySQL流程控制语句汇总(IF、CASE、LOOP、LEAVE、ITERATE、REPEAT和WHILE)

流程控制语句用来根据条件控制语句的执行。MySQL 中用来构造控制流程的语句有 IF 语句、CASE 语句、LOOP 语句、LEAVE 语句、ITERATE 语句、REPEAT 语句和 WHILE 语句。

每个流程中可能包含一个单独语句,或者是使用 BEGIN...END 构造的复合语句,构造可以被嵌套。

MySQL IF语句

IF 语句包含多个条件判断,根据判断的结果为 TRUE 或 FALSE 执行相应的语句,语法格式如下:
IF expr_condition THEN statement_list
   [ELSEIF expr_condition THEN statement_list] ...
   [ELSE statement_list]
END IF
IF 实现了一个基本的条件构造。如果 expr_condition 求值为真(TRUE),相应的 SQL 语句列表被执行;如果没有 expr_condition 匹配,则 ELSE 子句里的语句列表被执行。statement_list 可以包括一个或多个语句。

MySQL 中还有一个 IF() 函数,不同于这里描述的 IF 语句。

【实例】IF 语句的示例,代码如下:
IF val IS NULL
   THEN SELECT 'val is NULL';
   ELSE SELECT 'val is not NULL';
END IF;
该示例判断 val 值是否为空,如果 val 值为空,则输出字符串“val is NULL”,否则输出字符串“val is not NULL”。IF 语句都需要使用 END IF 来结束。

MySQL CASE语句

CASE 是另一个进行条件判断的语句,有两种格式。

第 1 种格式如下:
CASE case_expr
   WHEN when_value THEN statement_list
   [WHEN when_value THEN statement_list] ...
   [ELSE statement_list]
END CASE

【实例】使用 CASE 流程控制语句的第 1 种格式,判断 val 值等于 1、等于 2,或者两者都不等,语句如下:
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;
当 val 值为 1 时,输出字符串“val is 1”;当 val 值为 2 时,输出字符串“val is 2”;否则,输出字符串“val is not 1 or 2”。

CASE 语句的第 2 种格式如下:
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 流程控制语句的第 2 种格式,判断 val 是否为空、小于 0、大于 0 或者等于 0,语句如下:
CASE
   WHEN val is NULL THEN SELECT 'val is NULL';
   WHEN val < 0 THEN SELECT 'val is less than 0';
   WHEN val > 0 THEN SELECT 'val is greater than 0';
   ELSE SELECT 'val is 0';
END CASE;
当 val 值为空,输出字符串“val is NULL”;当 val 值小于 0 时,输出字符串“val is less than 0”;当 val 值大于 0 时,输出字符串“val is greater than 0”;否则,输出字符串“val is 0”。

MySQL LOOP语句

LOOP 循环语句用来重复执行某些语句,与 IF 和 CASE 语句相比,LOOP 只是创建一个循环操作的过程,并不进行条件判断。

LOOP 内的语句一直重复执行直到循环被退出(使用 LEAVE 子句),跳出循环过程。LOOP 语句的基本格式如下:
[loop_label:] LOOP
   statement_list
END LOOP [loop_label]
其中,loop_label 表示 LOOP 语句的标注名称,该参数可以省略;statement_list 参数表示需要循环执行的语句。

【实例】使用 LOOP 语句进行循环操作,id 值小于 10 时将重复执行循环过程,代码如下:
DECLARE id INT DEFAULT 0;
add_loop: LOOP
SET id = id + 1;
   IF id >= 10 THEN  LEAVE add_loop;
   END IF;
END LOOP add_ loop;
该示例循环执行 id 加 1 的操作。当 id 值小于 10 时,循环重复执行;当 id 值大于或者等于 10 时,使用 LEAVE 语句退出循环。LOOP 循环都以 END LOOP 结束。

MySQL LEAVE语句

LEAVE 语句用来退出任何被标注的流程控制构造,基本格式如下:
LEAVE label
其中,label 参数表示循环的标志。LEAVE 和 BEGIN ... END 或循环一起被使用。

【实例】使用 LEAVE 语句退出循环,代码如下:
add_num: LOOP
SET @count=@count+1;
IF @count=50 THEN LEAVE add_num ;
END LOOP add_num ;
该示例循环执行 count 加 1 的操作。当 count 的值等于 50 时,使用 LEAVE 语句跳出循环。

MySQL ITERATE语句

ITERATE 语句将执行顺序转到语句段开头处,语句基本格式如下:
ITERATE label
ITERATE 只可以出现在 LOOP、REPEAT 和 WHILE 语句内。ITERATE 的意思为“再次循环”,label 参数表示循环的标志。ITERATE 语句必须跟在循环标志前面。

【实例】ITERATE 语句示例,代码如下:
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
初始化 p1=0,如果 p1 的值小于 10 时,重复执行 p1 加 1 操作;当 p1 大于等于 10 并且小于等于 20 时,打印消息“p1 is between 10 and 20”;当 p1 大于 20 时,退出循环。

MySQL REPEAT语句

REPEAT 语句创建一个带条件判断的循环过程,每次语句执行完毕之后,会对条件表达式进行判断,如果表达式为真,则循环结束;否则重复执行循环中的语句。

REPEAT 语句的基本格式如下:
[repeat_label:] REPEAT
   statement_list
UNTIL expr_condition
END REPEAT [repeat_label]
repeat_label 为 REPEAT 语句的标注名称,该参数可以省略;REPEAT 语句内的语句或语句群被重复,直至 expr_condition 为真。

【实例】REPEAT 语句示例,id 值小于 10 时将重复执行循环过程,代码如下:
DECLARE id INT DEFAULT 0;
REPEAT
SET id = id + 1;
UNTIL  id >= 10
END REPEAT;
该示例循环执行 id 加 1 的操作。当 id 值小于 10 时,循环重复执行;当 id 值大于或者等于 10 时,退出循环。REPEAT 循环都以 END REPEAT 结束。

MySQL WHILE语句

WHILE 语句创建一个带条件判断的循环过程,与 REPEAT 不同,WHILE 在执行语句执行时,先对指定的表达式进行判断,如果为真,就执行循环内的语句,否则退出循环。

WHILE 语句的基本格式如下:
[while_label:] WHILE expr_condition DO
   statement_list
END WHILE [while_label]
while_label 为 WHILE 语句的标注名称;expr_condition 为进行判断的表达式,如果表达式结果为真,WHILE 语句内的语句或语句群被执行,直至 expr_condition 为假,退出循环。

【实例】WHILE 语句示例,i 值小于 10 时,将重复执行循环过程,代码如下:
DECLARE i INT DEFAULT 0;
WHILE i < 10 DO
   SET i = i + 1;
END WHILE;

相关文章