制御構造#フロー
/ *
シーケンス、分岐鎖状、環状、
* /
#分岐構造
#1 1.If機能は、
/ *
構文:IF(条件値1、値2)
機能:デュアルブランチ
アプリケーションまたは外端を開始します
* /
#1 2.case構造
/ *
構文:
ケース1:アナロジースイッチで
ケース変数または式
値1、文1;
値2、文2;
...
N- else文を、
エンド
ケース2:
ケース
、条件1の文1;
場合は、条件2、文2;
...
else文N-;
エンド
アプリケーションの終了を開始するか、外
* /
#の3.Ifは構造
/ *
構文は次のとおりです。
その後、条件1の文1場合は、
その後、ELSEIF条件2の文2;
....
N-へelse文;
END IF;
機能:複数の類似している場合
開始エンドにのみに適用することができます
* /
ケース#1:> 60のスコアは、C、そうでなければDを返す場合> 80スコアは、Bに戻った場合、> 90スコアは、Aに戻った場合、通過成績を達成するために関数を作成します
FUNCTIONのtest_ifをCREATE(FLOATスコア)CHARがRETURNS
BEGIN
DECLARE chをCHARのDEFAULT 'A'が、
スコア> 90 THEN SET CH = 'A' IF。
ELSEIFスコアが> 80 THEN SET CH = 'B';
ELSEIFスコアが> 60 THEN SET CH = 'C'。
ELSE CH = 'D'を設定。
END IF;
RETURNのCH;
ENDの$
SELECT test_if(87)$
ケース#2:給与<2000、その後、削除、もし5000>賃金> 2000年、1000年賃金上昇が、それ以外の場合は500を上げた場合、ストアドプロシージャを作成します。
(SAL DOUBLE IN)PROCEDURE test_if_proをCREATE
BEGIN
SAL <2000 THEN employees.salary = SAL従業員からの削除した場合。
ELSEIF SAL> = 2000およびSal <5000 THEN UPDATEの従業員が給料=給与+ 1000年employees.`salary` = SALを設定します。
ELSE UPDATEの従業員は給与=給与+ 500 employees.`salary` = SALを設定します。
END IF;
ENDの$
$(2100)test_if_pro CALL
ケース#1:> 60のスコアは、C、そうでなければDを返す場合> 80スコアは、Bに戻った場合、> 90スコアは、Aに戻った場合、通過成績を達成するために関数を作成します
FUNCTIONのtest_caseをCREATE(FLOATスコア)CHARがRETURNS
BEGIN
DECLARE chをCHARのDEFAULT 'A'が、
CASE
WHENスコア> 90 THEN SET CH = 'A';
> 80のスコアは次いで、CH =「B」に設定すると、
> 60のスコアは次いで、CH =「C」を設定すると、
ELSE CH = 'D'を設定。
エンドケース。
RETURNのCH;
ENDの$
SELECT test_case(56)$
#第二に、ループ構造
/ *
分類:
しばらく、ループ、REPEAT
ループ制御:
次に進み、引き続き、このサイクルの終わりを継続するために同様の反復
休暇似て休憩、ジャンプ、ループ電流の終わり
* /
#1 1.while
/ *
構文:
[レーベル:]条件は、ループしながら行う
ループ;
終了タグ[中];
レノボ:
一方、(ループ条件){
ループ本体;
}
* /
#2.loop
/ *
構文:
[ラベル:]ループ
ループ;
エンドループ[ラベル];
単純な無限ループをシミュレートするために使用することができます
* /
3.repeat#
/ *
構文:
[ラベル:]リピート
ループ本体と、
ループ条件の端まで
終了リピート[ラベル]。
* /
#1にはループ制御文加えなかっ
#ケース:記録の挿入管理テーブルの複数の数に応じて、一括挿入を
$ pro_while1のDROP PROCEDURE
プロシージャpro_while1(IN insertCount INT)を作成する
BEGIN
DEFAULT 1 DECLARE I INT;
WHILE I <= insertCount DOを
INSERTをADMIN INTO(ユーザ名、 `password`)VALUES(CONCAT( 'ローズ'、I)、 '666');
SETは、I = I + 1を;
END WHILE;
ENDの$
CALL pro_while1(100)$
/ *
int型I = 1;
一方、(I <= insertcount){
//挿入
私は++します;
}
* /
LEAVE文を追加する#2。
#ケース:数に応じて、管理テーブルの複数のレコードを挿入一括挿入、数> 20の停止した場合
TABLE管理者が$ TRUNCATE
$ test_while1のDROP PROCEDURE
、CREATE PROCEDUREのtest_while1(IN insertCount INTを)
BEGIN
DECLARE I INT DEFAULTを1;。
:WHILE I <= DO insertCount
INSERT ADMIN INTO(ユーザ名、 `password`)VALUES(CONCAT( 'xiaohua'、I)、 '0000');
IF I> = 20 THEN LEAVEあり;
END IF;
私は= I + 1を設定する;
END WHILE;
ENDの$
CALL test_while1(100)$
#3。は、反復ステートメントを追加します。
#ケース:一括挿入、挿入されただけで偶数の数に基づいて、レコードの管理テーブルの複数に挿入され
たTRUNCATE TABLEの管理者は、$
$ test_while1のDROP PROCEDURE
CREATE PROCEDUREをtest_while1(IN insertCount INTを)
BEGIN
DECLAREをI INT DEFAULT 0;
:WHILE I <= DO insertCount
SET I = I + 1;。
!IF MOD(私は、2)0 THEN ITERATE Aを=;
END IF;
INSERT INTOのADMIN(ユーザー名、 `password`)VALUES(CONCAT( 'xiaohua'、I)、 '0000' );
END WHILE A;
ENDの$
CALL test_while1(100)$
/ *
int型私= 0;
一方、(I <= insertCount){
I ++。
(I%2 == 0){もし
続けます。
}
插入
}
* /