MySQLのテーブルのすべての行をループするにはどうすればよいですか?
テーブルのすべての行をループするには、MySQLのストアドプロシージャを使用します。構文は次のとおりです-
delimiter // CREATE PROCEDURE yourProcedureName() BEGIN DECLARE anyVariableName1 INT DEFAULT 0; DECLARE anyVariableName2 INT DEFAULT 0; SELECT COUNT(*) FROM yourTableName1 INTO anyVariableName1; SET anyVariableName2 =0; WHILE anyVariableName2 < anyVariableName1 DO INSERT INTO yourTableName2(yourColumnName,...N) SELECT (yourColumnName1,...N) FROM yourTableName1 LIMIT anyVariableName2,1; SET anyVariableName2 = anyVariableName2+1; END WHILE; End; //
上記の構文を理解するために、2つのテーブルを作成しましょう。1つにはレコードがあり、2つ目のテーブルにはストアドプロシージャを使用したループからのレコードがあります。
以下は、最初のテーブルを作成するためのクエリです-
mysql> create table AllRows -> ( -> Id int, -> Name varchar(100) -> ); Query OK, 0 rows affected (0.46 sec)
挿入コマンドを使用して、最初のテーブルにいくつかのレコードを挿入します。クエリは次のとおりです-
mysql> insert into AllRows values(1,'John'); Query OK, 1 row affected (0.12 sec) mysql> insert into AllRows values(100,'Carol'); Query OK, 1 row affected (0.13 sec) mysql> insert into AllRows values(300,'Sam'); Query OK, 1 row affected (0.15 sec) mysql> insert into AllRows values(400,'Mike'); Query OK, 1 row affected (0.20 sec)
selectステートメントを使用して、テーブルのすべてのレコードを表示します。クエリは次のとおりです-
mysql> select *from AllRows;
出力
+------+-------+ | Id | Name | +------+-------+ | 1 | John | | 100 | Carol | | 300 | Sam | | 400 | Mike | +------+-------+ 4 rows in set (0.00 sec)
これは、2番目のテーブルを作成するためのクエリです。テーブルを作成するためのクエリは次のとおりです-
mysql> create table SecondTableRows -> ( -> StudentId int, -> StudentName varchar(100) -> ); Query OK, 0 rows affected (0.54 sec)
これで、ストアドプロシージャを使用して、テーブルのすべての行をループできます。ストアドプロシージャは次のとおりです-
mysql> delimiter // mysql> CREATE PROCEDURE Sp_AllRowsOfATable() -> BEGIN -> DECLARE lastRows INT DEFAULT 0; -> DECLARE startRows INT DEFAULT 0; -> SELECT COUNT(*) FROM AllRows INTO lastRows; -> SET startRows=0; -> WHILE startRows <lastRows DO -> INSERT INTO SecondTableRows(StudentId) SELECT (Id) FROM AllRows LIMIT startRows ,1; -> SET startRows= startRows+1; -> END WHILE; -> End; -> // Query OK, 0 rows affected (0.22 sec) mysql> delimiter ;
CALLコマンドを使用してストアドプロシージャを呼び出します。構文は次のとおりです-
CALL yourStoredProcedureName;
上記のストアドプロシージャを呼び出して、最初のテーブルのすべての行をループします。クエリは次のとおりです-
mysql> call Sp_AllRowsOfATable(); Query OK, 1 row affected (0.61 sec)
ストアドプロシージャを呼び出した後、2番目のテーブルで何が起こったかを確認しましょう。クエリは次のとおりです-
mysql> select StudentId from SecondTableRows;
出力
+-----------+ | StudentId | +-----------+ | 1 | | 100 | | 300 | | 400 | +-----------+ 4 rows in set (0.00 sec)
-
MySQLテーブルの行を条件に置き換える方法は?
条件を設定して行を置き換えるには、MySQLCASEステートメントを使用します。まずテーブルを作成しましょう- mysql> create table DemoTable1481 -> ( -> PlayerScore int -> ); Query OK, 0 rows affected (0.42 sec) 挿入コマンド-を使用して、テーブルにいくつかのレコードを挿入します mysql> insert into DemoTable1481 values(454); Query OK
-
MySQLテーブルで順序付けられた3行のみを選択するにはどうすればよいですか?
このために、LIMITとともにORDERBY句を使用できます。まずテーブルを作成しましょう- mysql> create table DemoTable1551 -> ( -> EmployeeId int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> EmployeeName varchar(20) -> ); Query OK, 0 rows affected (0.52 sec) 挿入コマンド-を使用して、テーブルにいく