MySQLのINSERT INTO SELECT文で別のテーブルの値を挿入する方法
あるテーブルの値を基に別のテーブルへデータを挿入したい場合は、INSERT INTO SELECT文を使用します。この構文では、SELECT文で抽出した結果セットをそのまま対象テーブルへ流し込めるため、テーブル間のデータ移行やコピーにもっとも効率的な方法の一つです。
以下の手順で、実際の動作を順番に確認していきましょう。
手順1:元となるテーブルを作成する
まず、データのコピー元となるテーブル「demo82」を作成します。
mysql> create table demo82 -> ( -> id int, -> name varchar(20) -> ); Query OK, 0 rows affected (2.06 sec)
手順2:レコードを挿入する
INSERTコマンドを使って、いくつかのレコードを追加します。
mysql> insert into demo82 values(100,'John'); Query OK, 1 row affected (0.14 sec) mysql> insert into demo82 values(101,'Bob'); Query OK, 1 row affected (0.32 sec) mysql> insert into demo82 values(101,'David'); Query OK, 1 row affected (0.09 sec) mysql> insert into demo82 values(101,'Mike'); Query OK, 1 row affected (0.12 sec) mysql> insert into demo82 values(100,'Sam'); Query OK, 1 row affected (0.07 sec)
手順3:テーブルの中身を確認する
SELECT文で登録されたレコードを表示してみましょう。
mysql> select *from demo82;
実行結果は次のとおりです。
+------+-------+ | id | name | +------+-------+ | 100 | John | | 101 | Bob | | 101 | David | | 101 | Mike | | 100 | Sam | +------+-------+ 5 rows in set (0.00 sec)
手順4:2つ目のテーブルを作成する
続いて、データの挿入先となるテーブル「demo83」を作成します。今回は列名を「username」としています。
mysql> create table demo83 -> ( -> id int, -> username varchar(20) -> ); Query OK, 0 rows affected (1.25 sec)
手順5:INSERT INTO SELECTで別テーブルの値を挿入する
いよいよ本題です。「demo82」からid=101のレコードのみを抽出し、「demo83」へ挿入します。ポイントは、SELECT側で取得した「name」列の値が、INSERT側の「username」列に対応して格納されるという点です。
mysql> insert into demo83(id,username) -> select id,name from demo82 where id=101; Query OK, 3 rows affected (0.14 sec) Records: 3 Duplicates: 0 Warnings: 0
3件のレコードが正常に挿入されました。SELECT文で結果を確認します。
mysql> select *from demo83;
実行結果は次のとおりです。
+------+----------+ | id | username | +------+----------+ | 101 | Bob | | 101 | David | | 101 | Mike | +------+----------+ 3 rows in set (0.00 sec)
まとめ
INSERT INTO テーブル名(列名) SELECT … の形式を使えば、WHERE句による絞り込みも自由に行えます。両テーブル間で列数や列の順序が異なる場合でも、このように明示的に列名を指定すれば、正しくマッピングしながらデータを挿入できます。大量データの移行やバックアップ用テーブルへの複製など、さまざまな場面で活用できる便利な構文なので、ぜひ覚えておきましょう。
-
MySQLで別テーブルの文字列データを参照して行を挿入する方法(INSERT INTO SELECT活用)
INSERT INTO SELECT文とはMySQLでは、別のテーブルの値を参照しながら新しい行を挿入したい場合、INSERT INTO ... SELECT文を使用します。この構文を使えば、SELECT文で取得した結果セットをそのまま別のテーブルへ挿入できるため、手作業でデータをコピーする必要がありません。以下に、実際の例を使って手順を詳しく解説します。ステップ1:元となるテーブルを作成するまず、データの参照元になるテーブル「demo61」を作成します。mysql> create table demo61-> (-> id int,-> name varchar(20
-
MySQLであるテーブルから別のテーブルへデータを挿入する方法(INSERT INTO SELECT)
MySQLであるテーブルから別のテーブルへデータをコピーして挿入したい場合は、INSERT INTO ... SELECT 文を使用します。この記事では、実際にテーブルを作成し、データを別テーブルへ移す手順をサンプルコードと実行結果とともにわかりやすく解説します。 1. 元となるテーブルを作成する まず、コピー元となるテーブル「DemoTable1」を作成します。カラムは Id(int型)と FirstName(varchar型)の2つです。 mysql> create table DemoTable1 -> ( -> Id int, -> Fi