MySQL入门到精通(三)

                                       流程控制语句

在MySQL中,流程控制语句,用于将多个SQL语句,划分或组成成符合业务逻辑的代码块。其中包括IF语句、CASE语句、LOOP语句、WHILE语句、LEAVE语句、ITERATE语句和REPEAT语句,它们可以进行流程控制。每个流程中,可能包含一个单独语句,也可以是使用BEGIN……END构造的复合语句,可以嵌套。

3.1 IF语句

IF语句用来进行条件判断,根据不同的条件执行不同的操作。该语句在执行时首先判断IF后的条件是否为真,则执行THEN后的语句,如果为假则继续判断IF语句直到为真为止,当以上都不满足时则执行ELSE语句后的内容。IF语句表示形式:

 IF condition THEN
statement_list ...
[ELSEIF condition THEN]
statement_list ...
[ELSE]  
statement_list ...
END IF

  • 如果condition满足true/1的条件,则执行对应的SQL语句,否则再判断elseif中的condition,都不满足则执行else中的SQL语句;
  • statement_list中可以包含一个或多个SQL语句;

参数说明:condition,表示判断条件 ;
                 statement_list...,表示SQL语句列表,它可以包括一个或多个语句;

注意,MySQL中还有一个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来结束,不可省略。

3.2 CASE语句

case语句为多分支语句结构,该语句首先从when后的value中查找与case后的value相等的值,如果查找到则执行该分支的内容,否则执行else后的内容。CASE语句表达形式:

第一种格式

CASE case_value
  WHERE
when_value THEN statement_list...
  [WHERE
when_value THEN statement_list...]
  [ELSE statement_list...]
END CASE 

参数说明:case_value:表示条件判断的表达式,决定了哪一个WHEN自己会被执行 ;
When_value:表示表达式可能的值,如果,某个when_value表达式与case_value表达式结果相同,则执行对应THEN关键字后的statement_list中的语句 ;
statement_list:表示不同when_value值的执行语句;

使用CASE流程控制语句,第一种格式,判断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 
WHEN condition THEN statement_list ...
[WHEN condition THEN statement_list...] 
[ELSE statement_list...] 
END CASE

注意:这里存储过程中的CASE语句,与控制流程函数中的SQL CASE表达式中的CASE是不同的 ;
存储过程中,CASE语句不能有ELSE NULL子句,并且,用END CASE代替END来终止。

3.3 WHILE循环语句

WHILE在语句执行时,先对指定的条件进行判断,如果为真,则执行循环内的语句,否则退出循环。WHILE循环语句表达形式:

[while_lable:] WHILE condition DO 
statement_list...
END WHILE [while_lable]

参数说明:While_lable:为WHILE语句的标注名称 ;
condition:为进行判断的表达式,如果表达式为真,WHILE语句内的语句,或语句群就被执行,直至expr_condition为假,退出循环;

使用WHILE语句,进行循环操作 

delimiter //
create procedure example_while (out sum int)
begin
declare i int default 1;
declare s int default 0;
while i<=100 do
set s=s+i;
set i=i+1;
end while;
set sum=s;
end
//

3.4 LOOP循环语句

LOOP循环语句,用来重复执行某些语句 ,该循环没有内置的循环条件,但可以借助于leave语句退出循环。LOOP循环语句表达形式:

[begin_lable:]loop

                         statement_list

 end loop[end_lable]

begin_lable和end_lable参数分别表示开始和结束的标志,必须相同,且可省略。

3.5 REPEAT循环语句

每次语句先执行一次完毕之后,会对条件表达式进行判断,如果表达式为真,则循环结束,否则,重复执行循环中的语句。REPEAT循环语句表达形式:

[repeat_lable:]repeat

                        statement_list...

                        until condition

end repeat[repeat_lable]

参数说明:repeat_lable:为repeat语句的标注名称,该参数是可选的 ;
               repeat语句内的语句或语句群被重复,直至condition为真;

3.6 LEAVE语句

用于退出任何被标注的流程控制结构,LEAVE语句表达形式:

LEAVE label

参数说明:label表示循环的标志 ;通常情况下,LEAVE语句与BEGIN……END、循环语句一起使用。

3.7 ITERATE语句

用于将执行顺序转到语句段的开头处,ITERATE语句表达形式:

ITERATE lable

参数说明:Lable,表示循环的标志 
注意,ITERATE语句只可以出现在LOOP、REPEAT和WHILE语句中。

该语句的格式与LEAVE大同小异,区别在于:LEAVE语句是离开一个循环,而ITERATE语句是重新开始一个循环。

你可能感兴趣的:(MySQL)