MySQLの単一クエリでINSERTとSELECTを使って、ある列の値を別の列にコピーする方法
MySQLのINSERT ... SELECT構文で列の値を別テーブルにコピーする
MySQLでは、INSERT文とSELECT文を組み合わせることで、単一のクエリであるテーブルの列の値を別のテーブルへコピーできます。ここでは、テーブル作成からデータ確認までの具体的な手順を、サンプルコードとともにわかりやすく解説します。
1. コピー元のテーブルを作成する
まず、データのコピー元となるテーブルを作成します。
mysql> create table DemoTable1
(
Name varchar(100),
Gender ENUM('MALE','FEMALE')
);
Query OK, 0 rows affected (0.50 sec)2. テーブルにレコードを挿入する
insertコマンドを使って、テーブルにレコードを追加します。
mysql> insert into DemoTable1 values('Chris','Male');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1 values('Emma','Female');
Query OK, 1 row affected (0.19 sec)3. テーブルの内容を確認する
select文でテーブル内のすべてのレコードを表示します。
mysql> select *from DemoTable1;
実行すると、次のような出力が得られます。
+-------+--------+ | Name | Gender | +-------+--------+ | Chris | MALE | | Emma | FEMALE | +-------+--------+ 2 rows in set (0.00 sec)
4. コピー先のテーブルを作成する
続いて、データのコピー先となる2つ目のテーブルを作成します。
mysql> create table DemoTable2
(
EmployeeGender varchar(100)
);
Query OK, 0 rows affected (0.47 sec)5. 単一クエリで列の値をコピーする
ここがポイントです。INSERT INTO ... SELECT構文を使うことで、単一のMySQLクエリだけで、ある列の値を別のテーブルの列にコピーできます。
mysql> insert into DemoTable2(EmployeeGender) select Gender from DemoTable1; Query OK, 2 rows affected (0.15 sec) Records: 2 Duplicates: 0 Warnings: 0
6. コピー結果を確認する
select文でコピー先テーブルの内容を確認しましょう。
mysql> select *from DemoTable2;
実行すると、次のような出力が得られます。
+----------------+ | EmployeeGender | +----------------+ | MALE | | FEMALE | +----------------+ 2 rows in set (0.00 sec)
まとめ
INSERT INTO ... SELECT構文を利用すれば、スクリプトやアプリケーション側の処理を追加することなく、1つのクエリだけでテーブル間のデータコピーが実現できます。大量データの移行や集計テーブルへの転記など、さまざまな場面で活用できる便利なテクニックです。なお、コピー元のENUM型の値は、コピー先のvarchar型の列にそのまま文字列として格納される点にも注目してください。
-
MySQLで1つのINSERT文を使って列に複数の値を一括挿入する方法
はじめにMySQLでは、1つのINSERT文を繰り返し実行しなくても、単一のクエリだけで同じ列に複数の値を挿入できます。VALUES句の後ろに、挿入したい値をカンマ区切りのタプル(行)として列挙するだけです。この方法はデータベースへの接続回数を減らせるため、大量のデータを登録する際にパフォーマンス面でも大きなメリットがあります。基本構文複数の値を1つの列に挿入する場合の基本構文は以下のとおりです。INSERT INTO テーブル名 VALUES(値1),(値2),...,(値N);このように、各値を丸括弧で囲み、カンマ(,)で区切って並べることで、1回のクエリで複数行をまとめて挿入できます。実
-
MySQLのINSERT INTO SELECT文で別のテーブルの値を挿入する方法
あるテーブルの値を基に別のテーブルへデータを挿入したい場合は、INSERT INTO SELECT文を使用します。この構文では、SELECT文で抽出した結果セットをそのまま対象テーブルへ流し込めるため、テーブル間のデータ移行やコピーにもっとも効率的な方法の一つです。 以下の手順で、実際の動作を順番に確認していきましょう。 手順1:元となるテーブルを作成する まず、データのコピー元となるテーブル「demo82」を作成します。 mysql> create table demo82 -> (