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

【MySQL】構造が異なるテーブル間でデータを挿入する方法(INSERT INTO SELECT)

MySQLで構造が異なるテーブル間にデータを挿入する方法

MySQLであるテーブルから別のテーブルへデータをコピーしたい場合、INSERT INTO SELECTステートメントを使用します。この方法は、両テーブルの列名や列数などの構造が異なる場合でも利用できます。本記事では、具体例を交えながら手順を解説します。

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

まず、データのコピー元となる最初のテーブル「DemoTable1」を作成しましょう。

mysql> create table DemoTable1
    -> (
    -> PersonId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> PersonName varchar(20),
    -> PersonAge int,
    -> PersonCountryName varchar(20)
    -> );
Query OK, 0 rows affected (0.55 sec)

ステップ2:テーブルにレコードを挿入する

INSERT文を使って、DemoTable1にサンプルデータを登録します。

mysql> insert into DemoTable1(PersonName,PersonAge,PersonCountryName) values('Chris Brown',24,'US');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1(PersonName,PersonAge,PersonCountryName) values('John Doe',26,'UK');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable1(PersonName,PersonAge,PersonCountryName) values('David Miller',23,'AUS');
Query OK, 1 row affected (0.10 sec)

ステップ3:挿入したデータを確認する

SELECT文ですべてのレコードを表示し、データが正しく登録されているか確認します。

mysql> select * from DemoTable1;

実行すると、次のような結果が出力されます。

+----------+--------------+-----------+-------------------+
| PersonId | PersonName   | PersonAge | PersonCountryName |
+----------+--------------+-----------+-------------------+
|        1 | Chris Brown  |        24 | US                |
|        2 | John Doe     |        26 | UK                |
|        3 | David Miller |        23 | AUS               |
+----------+--------------+-----------+-------------------+
3 rows in set (0.00 sec)

ステップ4:構造が異なるコピー先のテーブルを作成する

続いて、コピー先となる2つ目のテーブル「DemoTable2」を作成します。このテーブルは列名が異なるうえ、「EmployeeSalary」という追加の列があり、デフォルト値として20000が設定されている点に注目してください。

mysql> create table DemoTable2
    -> (
    -> EmployeeId int,
    -> EmployeeFullName varchar(30),
    -> EmployeeAge int,
    -> EmployeeCountryName varchar(20),
    -> EmployeeSalary int default 20000
    -> );
Query OK, 0 rows affected (0.52 sec)

ステップ5:INSERT INTO SELECTでデータを挿入する

構造が異なるテーブルから別のテーブルへデータを挿入するクエリは次のとおりです。

ポイント:INSERT側で指定する列の順序と、SELECT句で取得する列の順序を一致させることで、列名が異なっていても正しくマッピングされます。

mysql> insert into DemoTable2(EmployeeId,EmployeeFullName,EmployeeAge,EmployeeCountryName) select PersonId,PersonName,PersonAge,PersonCountryName from DemoTable1;
Query OK, 3 rows affected (0.26 sec)
Records: 3  Duplicates: 0  Warnings: 0

ステップ6:コピー結果を確認する

最後に、DemoTable2の内容をSELECT文で確認します。

mysql> select * from DemoTable2;

実行すると、次のようにデータが正しくコピーされていることがわかります。また、挿入時に指定しなかった「EmployeeSalary」列には、デフォルト値の20000が自動的に設定されています。

+------------+------------------+-------------+---------------------+----------------+
| EmployeeId | EmployeeFullName | EmployeeAge | EmployeeCountryName | EmployeeSalary |
+------------+------------------+-------------+---------------------+----------------+
|          1 | Chris Brown      |          24 | US                  |          20000 |
|          2 | John Doe         |          26 | UK                  |          20000 |
|          3 | David Miller     |          23 | AUS                 |          20000 |
+------------+------------------+-------------+---------------------+----------------+
3 rows in set (0.00 sec)

まとめ

  • 構造が異なるテーブル間でのデータコピーにはINSERT INTO SELECT文を使用する。
  • INSERT側の列リストとSELECT側の列リストの順序・データ型を揃えることが重要。
  • コピー先で指定しなかった列には、定義済みのデフォルト値が自動的に適用される。
  1. Javaを使ってMySQLテーブルにレコードを挿入する方法

    はじめに本記事では、JavaのJDBC(Java Database Connectivity)を使用して、MySQLデータベースのテーブルにレコードを挿入する手順を解説します。まずテーブルを作成し、その後Javaプログラムからデータを登録するまでの一連の流れを見ていきましょう。1. MySQLでテーブルを作成するまず、データを挿入するためのテーブルを作成します。以下はMySQLでテーブルを作成するクエリです。mysql> create table DemoTable(   Id int,   Name varchar(30),&

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

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