MySQL——流程控制的使用

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

  1.  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 ;

  2.   CASE   语句

    CASE  也是进行条件判断的语句,该语句有两种语句格式。

    CASE语句的第 1 种格式如下:

     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_list 中的语句;  satement_list 参数表示和  when_value 值不同时的执行语句。


【例】使用  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;

CASE  语句的第 2 种格式如下: 

CASE
    WHEN   expr_condition  THEN  statement_list
    [ WHEN  expr_condition   THEN  statement_list ]  ...
    [  ELSE  statement_list ]

    END CASE

    expr_condition 参数表示条件判断语句;  statement_list参数表示不同条件的执行语句。该语句中,WHEN  语句将被逐个执行,直到某个 expr_condition 表达式为真,则执行对应  THEN 关键字后面的  statement_list 语句。如果没有条件匹配,ELSE子句里的语句被执行.

【例】使用  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;

 

  3.  loop 语句

    LOOP 循环语句用来重复执行某些语句,与 IF 和 CASB 语句相比,LOOP  只是创建一个循环操作的过程,并不进行条件判断,LOOP 内的语句一直重复执行直到循环被退出,跳出循环过程。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;


   4.   LEAVE  语句

    LEAVE  语句用来退出任何被标注的流程控制构造,LEAVE 语句的基本格式如下:

    LEAVE  lable

    其中,label 参数表示循环的标志。LEAVE  和  BEGIN... END  或循环 一起被使用。

    【例】使用  LEAVE 语句退出循环。代码如下:

add_num: LOOP
    SET   @count  =  @count+1 ;
    IF  @count=50   THEN  TEAVE  add _num ;
END LOOP  add_num


    5.  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

6.   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; 

    7   WHILE  语句

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

    [ while_label: ]  WHILE  expr_condition  DO
    statement_ list

    END WHILE  [ while_label ]

    while_label  为 WHILE  语句的标注名称; expr_condition  为进行判断的表达式,如果表达式结果为真,WHILE 语句内的语句或语句群被执行,直至 expr_condition 为假,退出循环。

    【例】WHILE 语句示例,id值小于10,将重复执行循环过程。代码如下:

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

【注】参考于清华大学出版社《MySQL数据库应用案例课堂》2016年1月第1版

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值