MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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)

  1. MySQLテーブルの行を条件に置き換える方法は?

    条件を設定して行を置き換えるには、MySQLCASEステートメントを使用します。まずテーブルを作成しましょう- mysql> create table DemoTable1481    -> (    -> PlayerScore int    -> ); Query OK, 0 rows affected (0.42 sec) 挿入コマンド-を使用して、テーブルにいくつかのレコードを挿入します mysql> insert into DemoTable1481 values(454); Query OK

  2. 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) 挿入コマンド-を使用して、テーブルにいく