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を組み合わせれば、より安全にデータ移行を行うことも可能です。
-
MySQLのINSERT INTO SELECT文で別のテーブルの値を挿入する方法
あるテーブルの値を基に別のテーブルへデータを挿入したい場合は、INSERT INTO SELECT文を使用します。この構文では、SELECT文で抽出した結果セットをそのまま対象テーブルへ流し込めるため、テーブル間のデータ移行やコピーにもっとも効率的な方法の一つです。 以下の手順で、実際の動作を順番に確認していきましょう。 手順1:元となるテーブルを作成する まず、データのコピー元となるテーブル「demo82」を作成します。 mysql> create table demo82 -> (
-
MySQLであるテーブルから別のテーブルへデータを挿入する方法(INSERT INTO SELECT)
MySQLであるテーブルから別のテーブルへデータをコピーして挿入したい場合は、INSERT INTO ... SELECT 文を使用します。この記事では、実際にテーブルを作成し、データを別テーブルへ移す手順をサンプルコードと実行結果とともにわかりやすく解説します。 1. 元となるテーブルを作成する まず、コピー元となるテーブル「DemoTable1」を作成します。カラムは Id(int型)と FirstName(varchar型)の2つです。 mysql> create table DemoTable1 -> ( -> Id int, -> Fi