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

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句による絞り込みも自由に行えます。両テーブル間で列数や列の順序が異なる場合でも、このように明示的に列名を指定すれば、正しくマッピングしながらデータを挿入できます。大量データの移行やバックアップ用テーブルへの複製など、さまざまな場面で活用できる便利な構文なので、ぜひ覚えておきましょう。

  1. MySQLで別テーブルの文字列データを参照して行を挿入する方法(INSERT INTO SELECT活用)

    INSERT INTO SELECT文とはMySQLでは、別のテーブルの値を参照しながら新しい行を挿入したい場合、INSERT INTO ... SELECT文を使用します。この構文を使えば、SELECT文で取得した結果セットをそのまま別のテーブルへ挿入できるため、手作業でデータをコピーする必要がありません。以下に、実際の例を使って手順を詳しく解説します。ステップ1:元となるテーブルを作成するまず、データの参照元になるテーブル「demo61」を作成します。mysql> create table demo61-> (-> id int,-> name varchar(20

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

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