MySQLでINSERT INTO SELECTとUNIONを組み合わせて複数行を一括挿入する方法
INSERT INTO SELECTとUNIONによる複数行の一括挿入
MySQLでは、INSERT INTO ... SELECT文とUNIONを組み合わせることで、1つのSQL文で複数のレコードをまとめて挿入できます。通常、複数行の挿入にはVALUES句をカンマ区切りで並べる方法が一般的ですが、この構文を使えばSELECT文の形式で値を指定することも可能です。
基本構文
複数のレコードを一括挿入する場合、構文は以下のようになります。
insert into yourTableName(yourColumnName1,yourColumnName2,yourColumnName3,..N)
select yourValue1 as yourColumnName1,yourValue2 as yourColumnName2,yourValue3 as yourColumnName3,......N
union
select yourValue1 as yourColumnName1,yourValue2 as yourColumnName2,yourValue3 as yourColumnName3,......N
.
.
N各SELECT句でASを使って列名(エイリアス)を指定している点に注目してください。これにより、どの値がどの列に対応するのかが明確になります。
実例:テーブルを作成してデータを挿入する
上記の構文を理解するために、まずサンプル用のテーブルを作成しましょう。
mysql> create table DemoTable1936
(
StudentId int,
StudentName varchar(20),
StudentCountryName varchar(20)
);
Query OK, 0 rows affected (0.00 sec)次に、insertコマンドとUNIONを組み合わせて、3件の学生レコードを一度に挿入します。
mysql> insert into DemoTable1936(StudentId,StudentName,StudentCountryName)
select 1001 as StudentId,'Chris' as StudentName,'US' as StudentCountryName
union
select 1002 as StudentId,'Robert' as StudentName,'UK' as StudentCountryName
union
select 1003 as StudentId,'David' as StudentName,'AUS' as StudentCountryName;
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0実行結果を見ると、「Records: 3」と表示されており、3件のレコードが正常に挿入されたことがわかります。
挿入結果の確認
select文を使って、テーブル内のすべてのレコードを表示してみましょう。
mysql> select * from DemoTable1936;
上記のクエリを実行すると、以下のような出力が得られます。
+-----------+-------------+--------------------+ | StudentId | StudentName | StudentCountryName | +-----------+-------------+--------------------+ | 1001 | Chris | US | | 1002 | Robert | UK | | 1003 | David | AUS | +-----------+-------------+--------------------+ 3 rows in set (0.00 sec)
このように、UNIONで連結した各SELECT句の値が、それぞれ独立した行としてテーブルに登録されていることが確認できます。
補足:VALUES句との使い分け
なお、単純に複数行を挿入したいだけであれば、以下のようにVALUES句をカンマで区切る方法の方がシンプルです。
insert into DemoTable1936(StudentId,StudentName,StudentCountryName) values (1001,'Chris','US'), (1002,'Robert','UK'), (1003,'David','AUS');
一方、INSERT INTO SELECT + UNIONの構文は、既存テーブルからデータを抽出しながら挿入したり、条件分岐を含む複雑なSELECT文の結果を挿入したりする場合に特に有用です。用途に応じて適切な方法を選択するとよいでしょう。
-
MySQLのINSERT INTO SELECT構文でAUTO_INCREMENTテーブルにデータを挿入する方法
はじめにMySQLでは、INSERT INTO ... SELECT構文を使うことで、SELECT文の結果をそのまま別のテーブルへ挿入できます。AUTO_INCREMENT列を持つテーブルに対しても、SELECT句で明示的に値を指定すれば、任意のIDを設定した状態で挿入が可能です。本記事では、AUTO_INCREMENT主キーを持つテーブルに、INSERT INTO SELECT文で具体的な値を挿入する手順を、サンプルコードと実行結果とともに解説します。テーブルの作成まず、次のようにテーブルを作成します。mysql> create table DemoTable1923 &nb
-
MySQLテーブルで先頭ゼロ付きの値を選択して挿入する方法
MySQLで連番に先頭ゼロ(先行ゼロ)を付けた値をテーブルに挿入したい場合は、INSERT INTO SELECT文とLPAD()関数を組み合わせることで実現できます。LPAD()は文字列を指定した長さまで左側を特定の文字で埋める関数で、これを使えば「001」「002」のような形式のIDを簡単に生成できます。テーブルの作成まず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable1967 ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, UserId varchar(20)