Mysql には for ループがありません。 MySQL は for ループ ステートメントをサポートしていませんが、WHILE、REPEAT、LOOP の 3 つのループ ステートメントをサポートしています。 WHILE ループは各反復の開始時に式をチェックし、ポストテスト ループとも呼ばれる REPEAT ループ ステートメントはステートメントの実行後に式をチェックします。LOOP ステートメントはコード ブロックを繰り返し実行できます。
このチュートリアルの動作環境: Windows10 システム、mysql バージョン 8.0、Dell G3 コンピューター。
MySQL には、条件に基づいて SQL コードのブロックを繰り返し実行できるループ ステートメントが用意されています。
MySQL は for ループ ステートメントをサポートしていません .MySQL は while ループ、repeat ループ、loop ループのみをサポートします。
MySQL には、条件に基づいて SQL コードのブロックを繰り返し実行できるループ ステートメントが用意されています。 MySQL は for ループ ステートメントをサポートしていません。MySQL には、WHILE
、REPEAT
、LOOP
という 3 つのループ ステートメントがあります。
次のセクションで、各ループ ステートメントを詳しく調べます。
#WHILE ループ
WHILEステートメントの構文は次のとおりです:
WHILE expression DO statements END WHILE
WHILEループは、各反復の開始時に式をチェックします。
expressionevaluates が
TRUE の場合、MySQL は
expressionevaluates が ## になるまで、
WHILE と
END WHILE の間のステートメントを実行します。 #間違い###。
WHILEこのループは、ステートメントを実行する前に常にステートメントの式をチェックするため、プレテスト条件付きループと呼ばれます。
以下のフローチャートは、
WHILE
以下は、ストアド プロシージャ WHILE# で使用されます。 # #ループ ステートメントの例:
DELIMITER $$ DROP PROCEDURE IF EXISTS test_mysql_while_loop$$ CREATE PROCEDURE test_mysql_while_loop() BEGIN DECLARE x INT; DECLARE str VARCHAR(255); SET x = 1; SET str = ''; WHILE x <p>上記の <code>test_mysql_while_loop</code> ストアド プロシージャ: </p><p><code>まず、</code>str</p> 文字列を繰り返し構築します。 #xx
より大きくなるまで。
次に、SELECT ステートメントを使用して、最終的な文字列を表示します。
WHILE ループ ステートメントの条件は常に TRUE となり、予測できない不定ループが発生します。
テストしてみましょう
test_mysql_while_loopstoredストアド プロシージャを呼び出します:
CALL test_mysql_while_loop();
上記のクエリ ステートメントを実行し、次の結果を取得します-
mysql> CALL test_mysql_while_loop(); +------------+ | str | +------------+ | 1,2,3,4,5, | +------------+ 1 row in set Query OK, 0 rows affected
# #REPEAT Loop
ループ ステートメントの構文は次のとおりです。 REPEAT
statements;
UNTIL expression
END REPEAT
) が FALSE
と評価される場合、MySQL は式が
と評価されるまでステートメントを繰り返し実行します。 REPEAT
ループ ステートメントはステートメントの実行後に式 (expression
) をチェックするため、REPEAT
ループ ステートメントはポストステートメントとも呼ばれます。テストループ。
次のフローチャートは、REPEAT
ループ ステートメントの実行プロセスを示しています。
REPEAT## を使用できます。 # ループ ステートメントは、WHILE
ループ ステートメントを使用して、
ストアド プロシージャを書き換えます。
DELIMITER $$ DROP PROCEDURE IF EXISTS mysql_test_repeat_loop$$ CREATE PROCEDURE mysql_test_repeat_loop() BEGIN DECLARE x INT; DECLARE str VARCHAR(255); SET x = 1; SET str = ''; REPEAT SET str = CONCAT(str,x,','); SET x = x + 1; UNTIL x > 5 END REPEAT; SELECT str; END$$ DELIMITER ;
UNTIL## にはセミコロンがないことに注意してください。 # 表現 ( ###;###)。 上記のクエリ ステートメントを実行すると、次の結果が得られます。
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">mysql> CALL mysql_test_repeat_loop();
+------------+
| str |
+------------+
| 1,2,3,4,5, |
+------------+
1 row in set
Query OK, 0 rows affected</pre><div class="contentsignin">ログイン後にコピー</div></div>
LOOP、LEAVE、および ITERATE ステートメント
2 つのステートメントを使用してループを制御できます。
LEAVE
ステートメントは、条件の確認を待たずにループを直ちに終了するために使用されます。LEAVE ステートメントの動作原理は、PHP、C/C 、Java およびその他の言語の break
ステートメントと似ています。ITERATE
ステートメントは、PHP
、C/C
、Java
などの
MySQL には、コード ブロックを繰り返し実行できる
LOOP ステートメントと、ループ ラベルを使用できる柔軟性もあります。
次に、
LOOP ループ ステートメントの使用例を示します。
CREATE PROCEDURE test_mysql_loop() BEGIN DECLARE x INT; DECLARE str VARCHAR(255); SET x = 1; SET str = ''; loop_label: LOOP IF x > 10 THEN LEAVE loop_label; END IF; SET x = x + 1; IF (x mod 2) THEN ITERATE loop_label; ELSE SET str = CONCAT(str,x,','); END IF; END LOOP; SELECT str; END;
2
,4
,6
等。LOOP
语句之前放置一个loop_label
循环标签。x
的值大于10
,则由于LEAVE
语句,循环被终止。x
的值是一个奇数,ITERATE
语句忽略它下面的所有内容,并开始一个新的迭代。x
的值是偶数,则ELSE
语句中的块将使用偶数构建字符串。执行上面查询语句,得到以下结果 -
mysql> CALL test_mysql_loop(); +-------------+ | str | +-------------+ | 2,4,6,8,10, | +-------------+ 1 row in set Query OK, 0 rows affected
【相关推荐:mysql视频教程】
以上がmysqlにはforループがありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。