11、流程控制语句详解,IF,CASE,LOOP,LEAVE, ITERATE,REPEAT,WHILE
在存儲過程和自定義函數中可以使用流程控制語句來控制程序的流程。MySQL 中流程控制語句有:IF 語句、CASE 語句、LOOP 語句、LEAVE 語句、ITERATE 語句、REPEAT 語句和 WHILE 語句等。
下面將詳細講解這些流程控制語句。
1. IF語句
IF 語句用來進行條件判斷,根據是否滿足條件(可包含多個條件),來執行不同的語句,是流程控制中最常用的判斷語句。其語法的基本形式如下:
IF search_condition THEN statement_list[ELSEIF search_condition THEN statement_list]...[ELSE statement_list] END IF其中,search_condition 參數表示條件判斷語句,如果返回值為 TRUE ,相應的 SQL 語句列表(statement_list)被執行;如果返回值為 FALSE,則 ELSE 子句的語句列表被執行。statement_list 可以包括一個或多個語句。
注意:MySQL 中的 IF( ) 函數不同于這里的 IF 語句。
例 1
下面是一個使用 IF 語句的示例。代碼如下:
該示例根據 age 與 20 的大小關系來執行不同的 SET 語句。如果 age 值大于20,那么將 count1 的值加 1;如果 age 值等于 20,那么將 count2 的值加 1;其他情況將 count3 的值加 1。IF 語句都需要使用 END IF 來結束。
2. CASE語句
CASE 語句也是用來進行條件判斷的,它提供了多個條件進行選擇,可以實現比 IF 語句更復雜的條件判斷。CASE 語句的基本形式如下:
CASE case_valueWHEN when_value THEN statement_list[WHEN 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_value 相同值時的執行語句。
- CASE 語句都要使用 END CASE 結束。
CASE 語句還有另一種形式。該形式的語法如下:
CASEWHEN search_condition THEN statement_list[WHEN search_condition THEN statement_list] ...[ELSE statement_list] END CASE其中,search_condition 參數表示條件判斷語句;statement_list 參數表示不同條件的執行語句。
與上述語句不同的是,該語句中的 WHEN 語句將被逐個執行,直到某個 search_condition 表達式為真,則執行對應 THEN 關鍵字后面的 statement_list 語句。如果沒有條件匹配,ELSE 子句里的語句被執行。
這里介紹的 CASE 語句與“控制流程函數”里描述的 SQL CASE 表達式的 CASE 語句有輕微的不同。這里的 CASE 語句不能有 ELSE NULL 語句,并且用 END CASE 替代 END 來終止。
例 2
下面是一個使用 CASE 語句的示例。代碼如下:
代碼也可以是下面的形式:
CASEWHEN age=20 THEN SET @count1=@count1+1;ELSE SET @count2=@count2+1; END CASE;本示例中,如果 age 值為 20,count1 的值加 1,否則 count2 的值加 1。
3. LOOP 語句
LOOP 語句可以使某些特定的語句重復執行。與 IF 和 CASE 語句相比,LOOP 只實現了一個簡單的循環,并不進行條件判斷。
LOOP 語句本身沒有停止循環的語句,必須使用 LEAVE 語句等才能停止循環,跳出循環過程。LOOP 語句的基本形式如下:
[begin_label:]LOOPstatement_list END LOOP [end_label]其中,begin_label 參數和 end_label 參數分別表示循環開始和結束的標志,這兩個標志必須相同,而且都可以省略;statement_list 參數表示需要循環執行的語句。
例 3
使用 LOOP 語句進行循環操作。代碼如下:
該示例循環執行 count 加 1 的操作。因為沒有跳出循環的語句,這個循環成了一個死循環。LOOP 循環都以 END LOOP 結束。
4. LEAVE 語句
LEAVE 語句主要用于跳出循環控制。其語法形式如下:
LEAVE label其中,label 參數表示循環的標志,LEAVE 語句必須跟在循環標志前面。
例 4
下面是一個 LEAVE 語句的示例。代碼如下:
該示例循環執行 count 加 1 的操作。當 count 的值等于 100 時,跳出循環。
5. ITERATE 語句
ITERATE 是“再次循環”的意思,用來跳出本次循環,直接進入下一次循環。ITERATE 語句的基本語法形式如下:
ITERATE label其中,label 參數表示循環的標志,ITERATE 語句必須跟在循環標志前面。
例 5
下面是一個 ITERATE 語句的示例。代碼如下:
該示例循環執行 count 加 1 的操作,count 值為 100 時結束循環。如果 count 的值能夠整除 3,則跳出本次循環,不再執行下面的 SELECT 語句。
說明:LEAVE 語句和 ITERATE 語句都用來跳出循環語句,但兩者的功能是不一樣的。LEAVE 語句是跳出整個循環,然后執行循環后面的程序。而 ITERATE 語句是跳出本次循環,然后進入下一次循環。使用這兩個語句時一定要區分清楚。
6. REPEAT 語句
REPEAT 語句是有條件控制的循環語句,每次語句執行完畢后,會對條件表達式進行判斷,如果表達式返回值為 TRUE,則循環結束,否則重復執行循環中的語句。
REPEAT 語句的基本語法形式如下:
[begin_label:] REPEATstatement_listUNTIL search_condition END REPEAT [end_label]其中:
- begin_label 為 REPEAT 語句的標注名稱,該參數可以省略;
- REPEAT 語句內的語句被重復,直至 search_condition 返回值為 TRUE。
- statement_list 參數表示循環的執行語句;
- search_condition 參數表示結束循環的條件,滿足該條件時循環結束。
- REPEAT 循環都用 END REPEAT 結束。
例 6
下面是一個使用 REPEAT 語句的示例。代碼如下:
該示例循環執行 count 加 1 的操作,count 值為 100 時結束循環。
7. WHILE 語句
WHILE 語句也是有條件控制的循環語句。WHILE 語句和 REPEAT 語句不同的是,WHILE 語句是當滿足條件時,執行循環內的語句,否則退出循環。WHILE 語句的基本語法形式如下:
[begin_label:] WHILE search_condition DOstatement list END WHILE [end label]其中,search_condition 參數表示循環執行的條件,滿足該條件時循環執行;statement_list 參數表示循環的執行語句。WHILE 循環需要使用 END WHILE 來結束。
例 7
下面是一個使用 WHILE 語句的示例。代碼如下:
該示例循環執行 count 加 1 的操作,count 值小于 100 時執行循環。如果 count 值等于 100 了,則跳出循環。
總結
以上是生活随笔為你收集整理的11、流程控制语句详解,IF,CASE,LOOP,LEAVE, ITERATE,REPEAT,WHILE的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 10、游标(Cursor)的定义及使用
- 下一篇: 12、MySQL触发器到底是什么?