MySQLで別テーブルの文字列データを参照して行を挿入する方法(INSERT INTO SELECT活用)
INSERT INTO SELECT文とは
MySQLでは、別のテーブルの値を参照しながら新しい行を挿入したい場合、INSERT INTO ... SELECT文を使用します。この構文を使えば、SELECT文で取得した結果セットをそのまま別のテーブルへ挿入できるため、手作業でデータをコピーする必要がありません。
以下に、実際の例を使って手順を詳しく解説します。
ステップ1:元となるテーブルを作成する
まず、データの参照元になるテーブル「demo61」を作成します。
mysql> create table demo61
-> (
-> id int,
-> name varchar(20)
-> );
Query OK, 0 rows affected (1.84 sec)
ステップ2:サンプルデータを挿入する
INSERTコマンドを使って、いくつかのレコードを追加します。
mysql> insert into demo61 values(1,'John');
Query OK, 1 row affected (0.63 sec)
mysql> insert into demo61 values(2,'David');
Query OK, 1 row affected (0.13 sec)
mysql> insert into demo61 values(1,'Mike');
Query OK, 1 row affected (0.10 sec)
mysql> insert into demo61 values(2,'Carol');
Query OK, 1 row affected (0.30 sec)
mysql> insert into demo61 values(2,'Bob');
Query OK, 1 row affected (0.09 sec)
ステップ3:データを確認する
SELECT文でテーブルの中身を確認しましょう。
mysql> select *from demo61;
実行すると、次のような結果が出力されます。
+------+-------+
| id | name |
+------+-------+
| 1 | John |
| 2 | David |
| 1 | Mike |
| 2 | Carol |
| 2 | Bob |
+------+-------+
5 rows in set (0.00 sec)
ステップ4:挿入先のテーブルを作成する
次に、データの挿入先となる2つ目のテーブル「demo62」を作成します。ここではAUTO_INCREMENT属性を持つ主キー「employee_id」を設定している点がポイントです。
mysql> create table demo62
-> (
-> employee_id int not null auto_increment primary key,
-> employee_name varchar(20)
-> );
Query OK, 0 rows affected (1.60 sec)
ステップ5:INSERT INTO SELECTで行を挿入する
いよいよ本題です。demo61テーブルからid=2のレコードのname列(文字列データ)だけを抽出し、demo62テーブルのemployee_name列へ挿入します。
mysql> insert into demo62(employee_name)
-> select name from demo61 where id=2;
Query OK, 3 rows affected (0.14 sec)
Records: 3 Duplicates: 0 Warnings: 0
このように、SELECT文のWHERE句で条件を指定すれば、特定の行だけを対象にすることも可能です。また、employee_idは自動、employee_idは自動採番されるため、挿入時に明示的に指定する必要はありません。
ステップ6:結果を確認する
最後に、demo62テーブルの内容を確認します。
mysql> select *from demo62;
実行すると、次のような結果が出力されます。
+-------------+---------------+
| employee_id | employee_name |
+-------------+---------------+
| 1 | David |
| 2 | Carol |
| 3 | Bob |
+-------------+---------------+
3 rows in set (0.00 sec)
まとめ
INSERT INTO SELECT文を使えば、別テーブルの特定の列(この例では文字列型のname列)の値を参照しながら、条件に合致した行だけを効率的に新しいテーブルへ挿入できます。大量データの移行や集計結果の保存などにも応用できる便利な構文なので、ぜひ覚えておきましょう。
-
MySQLで別テーブルのIDからユーザー名を取得する方法|JOINの使い方を徹底解説
MySQLでは、別々のテーブルに保存されたデータをIDをキーに関連付けて取得したい場面が多くあります。そのような場合にはJOIN(内部結合)を使うことで、複数のテーブルを結合し、目的のユーザー名を簡単に取り出すことができます。 本記事では、実際にサンプルテーブルを作成しながら、JOINクエリの書き方をステップごとに解説します。 1つ目のテーブル「demo77」を作成する まず、ユーザーID(userid)とユーザー名(username)を格納するテーブルを作成します。useridは主キーとして設定します。 mysql> create table demo77 -> (
-
MySQLであるテーブルから別のテーブルへデータを挿入する方法(INSERT INTO SELECT)
MySQLであるテーブルから別のテーブルへデータをコピーして挿入したい場合は、INSERT INTO ... SELECT 文を使用します。この記事では、実際にテーブルを作成し、データを別テーブルへ移す手順をサンプルコードと実行結果とともにわかりやすく解説します。 1. 元となるテーブルを作成する まず、コピー元となるテーブル「DemoTable1」を作成します。カラムは Id(int型)と FirstName(varchar型)の2つです。 mysql> create table DemoTable1 -> ( -> Id int, -> Fi