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

MySQLでテーブル間の行を移動する方法|INSERT INTO SELECT文の使い方を解説

MySQLで行を別テーブルに移動する基本

MySQLでは、INSERT INTO SELECT文を使うことで、あるテーブルから別のテーブルへ行(レコード)を簡単に移動できます。この方法は、データの整理やアーカイブ処理など、さまざまな場面で役立ちます。

基本的な構文は以下のとおりです。

INSERT INTO 移動先テーブル名 SELECT * FROM 元テーブル名 WHERE 条件;

WHERE句で条件を指定すれば特定の行だけを移動でき、条件を省略すればすべての行を移動できます。

サンプルテーブルの作成

まず、実際に動作を確認するためのテーブルを作成しましょう。以下が最初のテーブル「StudentTable」を作成するクエリです。

mysql> CREATE TABLE StudentTable
    -> (
    ->   Id INT,
    ->   Name VARCHAR(100)
    -> );
Query OK, 0 rows affected (0.65 sec)

次に、移動元となる2つ目のテーブル「Employee」を作成します。

mysql> CREATE TABLE Employee
    -> (
    ->   EmployeeId INT,
    ->   EmployeeName VARCHAR(100)
    -> );
Query OK, 0 rows affected (0.54 sec)

Employeeテーブルにデータを挿入

続いて、Employeeテーブルにいくつかのレコードを挿入します。

mysql> INSERT INTO Employee VALUES(1,'Carol');
Query OK, 1 row affected (0.18 sec)

mysql> INSERT INTO Employee VALUES(2,'John');
Query OK, 1 row affected (0.16 sec)

mysql> INSERT INTO Employee VALUES(3,'Johnson');
Query OK, 1 row affected (0.11 sec)

SELECT文ですべてのレコードを確認してみましょう。

mysql> SELECT * FROM Employee;

実行結果は以下のとおりです。

+------------+--------------+
| EmployeeId | EmployeeName |
+------------+--------------+
|          1 | Carol        |
|          2 | John         |
|          3 | Johnson      |
+------------+--------------+
3 rows in set (0.00 sec)

条件を指定して特定の行だけを移動する

それでは、冒頭で紹介した構文を実践してみましょう。次のクエリは、Employeeテーブルから「Johnson」の行だけをStudentTableへ移動します。

mysql> INSERT INTO StudentTable SELECT * FROM Employee WHERE EmployeeId = 3 AND EmployeeName = 'Johnson';
Query OK, 1 row affected (0.17 sec)
Records: 1 Duplicates: 0 Warnings: 0

移動先のStudentTableに正しく行が登録されたか確認します。

mysql> SELECT * FROM StudentTable;

実行結果:

+------+---------+
| Id   | Name    |
+------+---------+
|    3 | Johnson |
+------+---------+
1 row in set (0.00 sec)

このように、指定した条件に合致する行だけを別テーブルへ移動できました。

すべての行を一括で移動する方法

すべての行を移動したい場合は、WHERE句を外すだけでOKです。以下のクエリを実行すると、Employeeテーブルの全レコードがStudentTableへコピーされます。

mysql> INSERT INTO StudentTable SELECT * FROM Employee;
Query OK, 3 rows affected (0.15 sec)
Records: 3 Duplicates: 0 Warnings: 0

更新後のStudentTableの中身を確認してみましょう。

mysql> SELECT * FROM StudentTable;

実行結果:

+------+---------+
| Id   | Name    |
+------+---------+
|    1 | Carol   |
|    2 | John    |
|    3 | Johnson |
+------+---------+
3 rows in set (0.00 sec)

まとめ

MySQLでテーブル間の行を移動するには、INSERT INTO SELECT文を使用します。ポイントは以下の2点です。

  • 特定の行だけ移動したい場合:WHERE句で条件を指定する
  • すべての行を移動したい場合:WHERE句を省略する

なお、この操作はあくまで「コピー」であるため、移動元テーブルからデータを削除したい場合は、別途DELETE文を実行する必要があります。トランザクション内でINSERTとDELETEを組み合わせれば、より安全にデータ移行を行うことも可能です。

  1. MySQLのINSERT INTO SELECT文で別のテーブルの値を挿入する方法

    あるテーブルの値を基に別のテーブルへデータを挿入したい場合は、INSERT INTO SELECT文を使用します。この構文では、SELECT文で抽出した結果セットをそのまま対象テーブルへ流し込めるため、テーブル間のデータ移行やコピーにもっとも効率的な方法の一つです。 以下の手順で、実際の動作を順番に確認していきましょう。 手順1:元となるテーブルを作成する まず、データのコピー元となるテーブル「demo82」を作成します。 mysql> create table demo82     -> (     

  2. MySQLであるテーブルから別のテーブルへデータを挿入する方法(INSERT INTO SELECT)

    MySQLであるテーブルから別のテーブルへデータをコピーして挿入したい場合は、INSERT INTO ... SELECT 文を使用します。この記事では、実際にテーブルを作成し、データを別テーブルへ移す手順をサンプルコードと実行結果とともにわかりやすく解説します。 1. 元となるテーブルを作成する まず、コピー元となるテーブル「DemoTable1」を作成します。カラムは Id(int型)と FirstName(varchar型)の2つです。 mysql> create table DemoTable1 -> ( -> Id int, -> Fi