【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側の列リストの順序・データ型を揃えることが重要。
- コピー先で指定しなかった列には、定義済みのデフォルト値が自動的に適用される。
-
Javaを使ってMySQLテーブルにレコードを挿入する方法
はじめに本記事では、JavaのJDBC(Java Database Connectivity)を使用して、MySQLデータベースのテーブルにレコードを挿入する手順を解説します。まずテーブルを作成し、その後Javaプログラムからデータを登録するまでの一連の流れを見ていきましょう。1. MySQLでテーブルを作成するまず、データを挿入するためのテーブルを作成します。以下はMySQLでテーブルを作成するクエリです。mysql> create table DemoTable( Id int, Name varchar(30),&
-
MySQLであるテーブルから別のテーブルへデータを挿入する方法(INSERT INTO SELECT)
MySQLであるテーブルから別のテーブルへデータをコピーして挿入したい場合は、INSERT INTO ... SELECT 文を使用します。この記事では、実際にテーブルを作成し、データを別テーブルへ移す手順をサンプルコードと実行結果とともにわかりやすく解説します。 1. 元となるテーブルを作成する まず、コピー元となるテーブル「DemoTable1」を作成します。カラムは Id(int型)と FirstName(varchar型)の2つです。 mysql> create table DemoTable1 -> ( -> Id int, -> Fi