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

MySQLで1つのクエリを使ってSELECTとINSERTを同時に実行する方法

MySQLでは、INSERT INTO ... SELECT構文とUNION ALLを組み合わせることで、1つのクエリだけで別テーブルからデータを選択(SELECT)し、挿入(INSERT)することができます。本記事では、実際のサンプルコードを使ってその手順をわかりやすく解説します。

1. 最初のテーブルを作成する

まず、データの挿入先となる最初のテーブルを作成します。以下のクエリを実行してください。

mysql> create table DemoTable1
-> (
-> StudentName varchar(20),
-> StudentMarks int
-> );
Query OK, 0 rows affected (0.67 sec)

このテーブルは、学生名(StudentName)と点数(StudentMarks)を格納する構造になっています。

2. 2つ目のテーブルを作成する

次に、データの抽出元となる2つ目のテーブルを作成しましょう。

mysql> create table DemoTable2
-> (
-> Name varchar(20)
-> );
Query OK, 0 rows affected (0.61 sec)

3. 2つ目のテーブルにレコードを挿入する

INSERTコマンドを使って、テーブルにレコードを追加します。

mysql> insert into DemoTable2 values('Chris');
Query OK, 1 row affected (0.12 sec)

4. 挿入したレコードを確認する

SELECT文を使って、テーブル内のすべてのレコードを表示してみましょう。

mysql> select * from DemoTable2;

実行すると、以下のような出力が得られます。

+-------+
| Name |
+-------+
| Chris |
+-------+
1 row in set (0.00 sec)

5. 1つのクエリでSELECTとINSERTを同時に実行する

ここが本記事のポイントです。INSERT INTO ... SELECT構文にUNION ALLを組み合わせることで、1つのMySQLクエリだけでレコードの選択と挿入を同時に行えます。

mysql> insert into DemoTable1
-> select Name,89 from DemoTable2
-> union all
-> select Name,98 from DemoTable2;
Query OK, 2 rows affected (0.15 sec)
Records: 2 Duplicates: 0 Warnings: 0

このクエリでは、DemoTable2から「Chris」という名前を取得し、それぞれ89点と98点という異なる点数を付けて、DemoTable1に2行挿入しています。UNION ALLを使うことで、複数のSELECT結果を1つの結果セットにまとめて挿入できるのがポイントです。

6. 挿入結果を確認する

最後に、最初のテーブルからレコードをSELECTして、正しく挿入されたかを確認しましょう。

mysql> select * from DemoTable1;

実行結果は以下のとおりです。

+-------------+--------------+
| StudentName | StudentMarks |
+-------------+--------------+
| Chris | 89 |
| Chris | 98 |
+-------------+--------------+
2 rows in set (0.00 sec)

まとめ

このように、INSERT INTO ... SELECTUNION ALLを組み合わせれば、1つのクエリで複数テーブルをまたいだデータの選択と挿入を効率的に行えます。なお、重複行も含めてすべて挿入したい場合はUNION ALLを使用し、重複を除外したい場合はUNIONを使うとよいでしょう。データ移行や集計テーブルの作成など、実務でもよく使われるテクニックなので、ぜひ覚えておいてください。

  1. MySQLでSELECTクエリを使用してデータを挿入(INSERT)する方法

    MySQLでは、INSERT文とSELECTクエリを組み合わせることで、テーブルにデータを挿入することができます。通常、SELECTは既存のテーブルからデータを取得するために使われますが、値を直接指定してINSERTを実行する際にも活用できる便利な手法です。基本構文SELECTクエリを使用してINSERTを実行する場合の構文は以下の通りです。insert into yourTableName(yourColumnName1,yourColumnName2,yourColumnName3,...N) select yourValue1,yourValue2,yourValue3,......N;

  2. MySQLの1つのUPDATE文で2つの列を同時に更新する方法

    はじめにMySQLでは、1つのUPDATE文の中でSET句を一度だけ使えば、複数の列を同時に更新できます。各列の指定はカンマ(,)で区切って記述します。この記事では、実際にテーブルを作成し、1つのクエリで2つの列(FirstNameとLastName)を更新する手順を解説します。サンプルテーブルの作成まず、以下のようにCREATE TABLE文でテーブルを作成します。mysql> create table DemoTable1909 ( Id int NOT NULL, FirstName varchar(20), LastName varchar(20)