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

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文の結果を挿入したりする場合に特に有用です。用途に応じて適切な方法を選択するとよいでしょう。

  1. 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

  2. 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)