建設(shè)局網(wǎng)站施工合同范本上海網(wǎng)站建設(shè)哪家好
1、流程控制
解決復(fù)雜問(wèn)題不可能是通過(guò)一個(gè)SQL語(yǔ)句完成,我們需要執(zhí)行多個(gè)SQL操作。流程控制語(yǔ)句的作用就是控制存儲(chǔ)過(guò)程中SQL語(yǔ)句的執(zhí)行順序,是我們完成復(fù)雜操作必不可少的一部分。只要是執(zhí)行的程序,流程就分為三大類:
1、順序結(jié)構(gòu):程序從上往下依次執(zhí)行
2、分支結(jié)構(gòu):程序按條件進(jìn)行選擇執(zhí)行,從兩條或多條路徑中選擇一條執(zhí)行。
3、循環(huán)結(jié)構(gòu):程序滿足一定條件,重復(fù)執(zhí)行一組語(yǔ)句。
針對(duì)MySQL的流程控制語(yǔ)句主要有三類。注意:只能用于存儲(chǔ)程序(存儲(chǔ)過(guò)程和函數(shù))
1、條件判斷語(yǔ)句:IF語(yǔ)句和Case語(yǔ)句
2、循環(huán)語(yǔ)句:Loop、While、Repeat語(yǔ)句
3、跳轉(zhuǎn)語(yǔ)句:leave、Iterate語(yǔ)句
1.1 分支結(jié)構(gòu)
程序按條件進(jìn)行選擇執(zhí)行,從兩條或多條路徑中選擇一條執(zhí)行。
1.1.1 IF(條件判斷)
1、語(yǔ)法結(jié)構(gòu)
If 表達(dá)式1 Then 操作1;
[elseif 表達(dá)式2 Then 操作2;]...
[else 操作n;]
End if;
2、特點(diǎn)
(1)不同的表達(dá)式對(duì)應(yīng)不同的操作
(2)使用在Begin…End中
3、案例實(shí)操
1.1.2 Case(條件判斷)
1、語(yǔ)法結(jié)構(gòu)
#情況1:類似于switch
Case 表達(dá)式
When 值1 Then 結(jié)果1或語(yǔ)句1(如果是語(yǔ)句,需要加分號(hào))
When 值2 Then 結(jié)果2或語(yǔ)句2(如果是語(yǔ)句,需要加分號(hào))
...
Else 結(jié)果n或語(yǔ)句n(如果是語(yǔ)句,需要加分號(hào))
End [Case] (如果是放在Begin End中需要加上Case,如果放在select后面不需要)
案例實(shí)操
#情況二:類似多重if
Case
when 條件1 Then 結(jié)果1或語(yǔ)句1(如果是語(yǔ)句,需要加分號(hào))
When 條件2 Then 結(jié)果2或語(yǔ)句2(如果是語(yǔ)句,需要加分號(hào))
...
Else 結(jié)果n或語(yǔ)句n(如果是語(yǔ)句,需要加分號(hào))
End [case] (如果是放在Begin...End 中需要加上case,如果放在select后面不需要)
案例實(shí)操:
1.2 循環(huán)結(jié)構(gòu)
1.2.1 Loop(循環(huán)結(jié)構(gòu)、還是個(gè)死循環(huán))
Loop循環(huán)語(yǔ)句用來(lái)重復(fù)執(zhí)行某些語(yǔ)句。Loop內(nèi)的語(yǔ)句一直重復(fù)執(zhí)行直到循環(huán)被退出(使用Leave子句),跳出循環(huán)過(guò)程。
1、語(yǔ)法結(jié)構(gòu)
循環(huán)別名:loop循環(huán)體循環(huán)條件End Loop 循環(huán)別名
2、案例實(shí)操(1加到10的和)
1.2.2 While(循環(huán)結(jié)構(gòu))
While語(yǔ)句創(chuàng)建一個(gè)帶條件判斷的循環(huán)過(guò)程。While在執(zhí)行語(yǔ)句執(zhí)行時(shí),先對(duì)指定的表達(dá)式進(jìn)行判斷,如果為真,就執(zhí)行循環(huán)內(nèi)的語(yǔ)句,否則就退出循環(huán)。
1、語(yǔ)法結(jié)構(gòu)
[while_label:] While 循環(huán)條件 Do循環(huán)體
End While[while_label];
說(shuō)明:while_label為While語(yǔ)句的標(biāo)注名稱;如果循環(huán)條件為真,While語(yǔ)句內(nèi)的語(yǔ)句或語(yǔ)句群被執(zhí)行,直至循環(huán)條件為假,退出循環(huán)條件。
2、案例實(shí)操(本次實(shí)操?zèng)]有給While循環(huán)取別名)
(1加到10的和)
1.2.3 repeat(循環(huán)結(jié)構(gòu))
Repeat語(yǔ)句創(chuàng)建一個(gè)帶條件判斷的循環(huán)過(guò)程。和While循環(huán)不同的是,Repeat循環(huán)首先會(huì)執(zhí)行一次循環(huán)體,然后在Until中進(jìn)行表達(dá)式的判斷,如果滿足條件就退出,即End Repeat;如果條件不滿足在,則會(huì)繼續(xù)執(zhí)行循環(huán),直到滿足退出條件為止。
1、語(yǔ)法結(jié)構(gòu)
Repeat
循環(huán)體
Until 結(jié)束循環(huán)的條件表達(dá)式
end Repeat[repeate_lable];
2、案例實(shí)操(1加到10的和)
1.3 跳轉(zhuǎn)語(yǔ)句
1.3.1 Leave語(yǔ)句(和java中break類似)
Leave語(yǔ)句可以用在循環(huán)語(yǔ)句中,或這Begin和End包裹起來(lái)的程序體內(nèi),表示跳出循環(huán)或者跳出循環(huán)體。
1、語(yǔ)法結(jié)構(gòu)
Leave 標(biāo)記名;
2、案例實(shí)操
看循環(huán)結(jié)構(gòu)Loop的實(shí)例!!!
1.3.2 Iterate語(yǔ)句(和java中Continue類似)
Iterate語(yǔ)句只能用在循環(huán)語(yǔ)句(Loop、While、Repeat語(yǔ)句)內(nèi),表示重新開始循環(huán),將執(zhí)行順序轉(zhuǎn)到語(yǔ)句段的開頭。
1、基本語(yǔ)法
Iterate label;
2、案例實(shí)操
mysql> DELIMITER //
mysql> CREATE PROCEDURE test_loop1()
-> BEGIN
-> DECLARE num INT DEFAULT 1;
-> DECLARE bSum INT DEFAULT 0;
-> LOOP
-> SET bSum = bSum + num;
-> IF num = 8 THEN
-> ITERATE;
-> END IF;
-> SET num = num + 1;
-> IF num > 10 THEN
-> LEAVE;
-> END IF;
-> END LOOP;
-> SELECT bSum;
-> END //
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;
mysql> CALL test_loop1();
±-----+
| bSum |
±-----+
| 43 |
±-----+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
2、游標(biāo)
2.1 什么是游標(biāo)
雖然我們也可以通過(guò)篩選條件 WHERE 和HAVING,或者是限定返回記錄的關(guān)鍵字 LIMIT 返回一條錄,
但是,卻無(wú)法在結(jié)果集中像指針一樣,向前定位一條記錄、向后定位一條記錄,或者是 隨意定位到某一
條記錄 ,并對(duì)記錄的數(shù)據(jù)進(jìn)行處理。
這個(gè)時(shí)候,就可以用到游標(biāo)。游標(biāo),提供了一種靈活的操作方式,讓我們能夠?qū)Y(jié)果集中的每一條記錄
進(jìn)行定位,并對(duì)指向的記錄中的數(shù)據(jù)進(jìn)行操作的數(shù)據(jù)結(jié)構(gòu)。游標(biāo)讓 SQL 這種面向集合的語(yǔ)言有了面向過(guò)
程開發(fā)的能力。
在 SQL 中,游標(biāo)是一種臨時(shí)的數(shù)據(jù)庫(kù)對(duì)象,可以指向存儲(chǔ)在數(shù)據(jù)庫(kù)表中的數(shù)據(jù)行指針。這里游標(biāo) 充當(dāng)了指針的作用 ,我們可以通過(guò)操作游標(biāo)來(lái)對(duì)數(shù)據(jù)行進(jìn)行操作。
案例實(shí)操