MySQLでUNION ALLを使って1つのクエリで複数のレコードをテーブルに挿入する方法
MySQLでは、INSERT文とSELECT文、そしてUNION ALL演算子を組み合わせることで、1つのクエリだけで複数のレコードをテーブルに挿入できます。UNION ALLは、複数のSELECT文の結果セットを重複行を排除せずにそのまま連結する演算子です。本記事では、実際のサンプルコードを交えながら手順を詳しく解説します。
ステップ1:最初のテーブルを作成する
まず、挿入先となる1つ目のテーブル「DemoTable1」を作成します。
mysql> create table DemoTable1
-> (
-> StudentName varchar(20),
-> StudentMarks int
-> );
Query OK, 0 rows affected (0.67 sec)
このテーブルには、学生名(StudentName)と点数(StudentMarks)の2つのカラムを持たせています。
ステップ2:2つ目のテーブルを作成する
上記の概念を理解するために、データの参照元となる2つ目のテーブル「DemoTable2」を作成しましょう。
mysql> create table DemoTable2
-> (
-> Name varchar(20)
-> );
Query OK, 0 rows affected (0.61 sec)
ステップ3:テーブルにレコードを挿入する
INSERTコマンドを使って、DemoTable2にレコードを追加します。
mysql> insert into DemoTable2 values('Chris');
Query OK, 1 row affected (0.12 sec)
ステップ4:テーブルの内容を確認する
SELECT文を使って、DemoTable2に登録されたすべてのレコードを表示してみます。
mysql> select * from DemoTable2;
実行すると、次のような出力が得られます。
+-------+ | Name | +-------+ | Chris | +-------+ 1 row in set (0.00 sec)
ステップ5:単一クエリでSELECTとINSERTを実行する
ここが本題です。INSERT文の中でSELECT文とUNION ALLを組み合わせると、1つのクエリで複数のレコードを同時に挿入できます。
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
このクエリでは、「Name」と固定値89の組み合わせ、および「Name」と固定値98の組み合わせという2種類のSELECT結果をUNION ALLで連結し、その両方をDemoTable1へ一度に挿入しています。
挿入結果の確認
最後に、1つ目のテーブルからレコードを取得して結果を確認しましょう。
mysql> select * from DemoTable1;
実行すると、次のように2件のレコードが正しく登録されていることがわかります。
+-------------+--------------+ | StudentName | StudentMarks | +-------------+--------------+ | Chris | 89 | | Chris | 98 | +-------------+--------------+ 2 rows in set (0.00 sec)
まとめ
このように、INSERT ... SELECT ... UNION ALL構文を使えば、既存テーブルの値と固定値を組み合わせた複数行を、1回のクエリで効率的に挿入できます。なお、UNION ALLは重複行もそのまま返す点に注意してください。重複を除外したい場合は、代わりにUNIONを使用します。
-
MySQLのDELETE文とIN句を組み合わせて1つのクエリで複数レコードを削除する方法
MySQLでは、IN()句を活用することで、複数の条件値に一致するレコードを1つのDELETEクエリでまとめて削除できます。個別に削除クエリを実行する必要がなく、効率的なデータ操作が可能になります。ここでは、サンプルテーブルを作成し、実際にIN()句を使ったレコード削除の手順を解説します。1. サンプルテーブルの作成まず、テーブルを作成しましょう。mysql> create table DemoTable1922 ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, StudentName varchar(20)
-
MySQLで1つのINSERT文を使って列に複数の値を一括挿入する方法
はじめにMySQLでは、1つのINSERT文を繰り返し実行しなくても、単一のクエリだけで同じ列に複数の値を挿入できます。VALUES句の後ろに、挿入したい値をカンマ区切りのタプル(行)として列挙するだけです。この方法はデータベースへの接続回数を減らせるため、大量のデータを登録する際にパフォーマンス面でも大きなメリットがあります。基本構文複数の値を1つの列に挿入する場合の基本構文は以下のとおりです。INSERT INTO テーブル名 VALUES(値1),(値2),...,(値N);このように、各値を丸括弧で囲み、カンマ(,)で区切って並べることで、1回のクエリで複数行をまとめて挿入できます。実