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

MySQLで異なる列を持つ別テーブルへレコードをコピーする方法(INSERT INTO SELECT活用)

あるテーブルから、列名や構成が異なる別のテーブルへレコードをコピーしたい場合、INSERT INTO SELECT 文を使用します。この記事では、実際にサンプルテーブルを作成しながら、具体的な手順をわかりやすく解説します。

ステップ1:コピー元のテーブルを作成する

まずはコピー元となるテーブル「DemoTable1900」を作成します。ClientIdは自動採番(AUTO_INCREMENT)とし、初期値を1000に設定しています。また、ClientAgeにはデフォルト値29を設定しました。

mysql> create table DemoTable1900
    (
    ClientId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ClientName varchar(20),
    ClientAge int default 29
    ) auto_increment=1000;
Query OK, 0 rows affected (0.00 sec)

ステップ2:テーブルにサンプルデータを挿入する

INSERTコマンドを使って、いくつかのレコードを挿入します。最後の「Sam」のように年齢を指定しない場合、デフォルト値の29が自動的に設定される点に注目してください。

mysql> insert into DemoTable1900(ClientName,ClientAge) values('Chris',45);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1900(ClientName,ClientAge) values('David',29);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1900(ClientName,ClientAge) values('Mike',37);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1900(ClientName) values('Sam');
Query OK, 1 row affected (0.00 sec)

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

mysql> select * from DemoTable1900;

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

+----------+------------+-----------+
| ClientId | ClientName | ClientAge |
+----------+------------+-----------+
|     1000 | Chris      |        45 |
|     1001 | David      |        29 |
|     1002 | Mike       |        37 |
|     1003 | Sam        |        29 |
+----------+------------+-----------+
4 rows in set (0.00 sec)

ステップ3:コピー先のテーブルを作成する

次に、コピー先となるテーブル「DemoTable1901」を作成します。このテーブルは元テーブルとは異なる列名(EmployeeId、EmployeeName、EmployeeAge)を持っている点がポイントです。

mysql> create table DemoTable1901
    (
    EmployeeId int,
    EmployeeName varchar(20),
    EmployeeAge int
    );
Query OK, 0 rows affected (0.00 sec)

ステップ4:INSERT INTO SELECTでレコードをコピーする

いよいよ本題です。INSERT INTO SELECT文を使えば、列名が異なるテーブル間でも、対応する列を明示的に指定することでデータをコピーできます。

mysql> insert into DemoTable1901(EmployeeId,EmployeeName,EmployeeAge)
    select ClientId,ClientName,
    ClientAge from DemoTable1900;
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

このクエリでは、「DemoTable1900」のClientId→EmployeeId、ClientName→EmployeeName、ClientAge→EmployeeAgeというように、列同士の対応関係を指定してコピーを行っています。

SELECT文でコピー結果を確認しましょう。

mysql> select * from DemoTable1901;

実行結果は以下のとおりです。元テーブルのデータが、異なる列名のテーブルへ正しくコピーされていることがわかります。

+------------+--------------+-------------+
| EmployeeId | EmployeeName | EmployeeAge |
+------------+--------------+-------------+
|       1000 | Chris        |          45 |
|       1001 | David        |          29 |
|       1002 | Mike         |          37 |
|       1003 | Sam          |          29 |
+------------+--------------+-------------+
4 rows in set (0.00 sec)

まとめ

列構成が異なるテーブル間でデータをコピーする場合は、INSERT INTO SELECT文が便利です。INSERT側でコピー先の列名を、SELECT側でコピー元の列名をそれぞれ指定することで、柔軟にデータ移行やバックアップ処理を実現できます。WHERE句を組み合わせれば、特定の条件に合うレコードだけをコピーすることも可能なので、ぜひ活用してみてください。

  1. MySQLでハイフン区切りの文字列値を1つの列から複数の列に分離して選択する方法

    ハイフンで区切られた文字列値を1つの列から複数の列に分離して取得したい場合、MySQLの SUBSTRING_INDEX() 関数を使用すると簡単に実現できます。ここでは、サンプルテーブルを使って具体的な手順を解説します。 サンプルテーブルの作成 まず、従業員情報を格納するテーブルを作成します。 mysql> create table DemoTable1962 ( EmployeeInformation text ); Query OK, 0 rows affected (0.00 sec) データの挿入 次に、INSERT文を使って「ID-名前-年齢」の形

  2. 【MySQL】別のテーブルのデータを参照してテーブルを更新する方法(UPDATE+JOIN)

    MySQLでは、UPDATEコマンドとJOINを組み合わせることで、別のテーブルのデータを参照しながら、対象のテーブルを効率的に更新できます。本記事では、2つのテーブルを使った具体的なサンプルを通じて、その手順をわかりやすく解説します。 手順1:参照元のテーブルを作成する まず、氏名データを保持する1つ目のテーブル「demo54」を作成します。 mysql> create table demo54-> (-> firstName varchar(20),-> lastName varchar(20)-> );Query OK, 0 rows affected (