MySQLで1つのINSERT文を使って列に複数の値を一括挿入する方法
はじめに
MySQLでは、1つのINSERT文を繰り返し実行しなくても、単一のクエリだけで同じ列に複数の値を挿入できます。VALUES句の後ろに、挿入したい値をカンマ区切りのタプル(行)として列挙するだけです。この方法はデータベースへの接続回数を減らせるため、大量のデータを登録する際にパフォーマンス面でも大きなメリットがあります。
基本構文
複数の値を1つの列に挿入する場合の基本構文は以下のとおりです。
INSERT INTO テーブル名 VALUES(値1),(値2),...,(値N);
このように、各値を丸括弧で囲み、カンマ(,)で区切って並べることで、1回のクエリで複数行をまとめて挿入できます。
実際に試してみよう
構文の動作を確認するために、まずサンプル用のテーブルを作成します。ここでは「Department(学部・学科名)」という1つの列を持つテーブルを例にします。
ステップ1:テーブルを作成する
mysql> CREATE TABLE DemoTable2022
-> (
-> Department VARCHAR(100)
-> );
Query OK, 0 rows affected (0.49 sec)ステップ2:複数の値を一括挿入する
次に、INSERT文のVALUES句に6つの学科名をカンマ区切りで指定し、1回のクエリですべて挿入します。
mysql> INSERT INTO DemoTable2022 VALUES('Computer Science'),('Information Technology'),
('Civil'),('Mechanical'),('Electronics'),('Electrical');
Query OK, 6 rows affected (0.46 sec)
Records: 6 Duplicates: 0 Warnings: 0実行結果を見ると、「6 rows affected」と表示されており、1回のクエリで6件のレコードが正常に挿入されたことがわかります。
ステップ3:挿入結果を確認する
SELECT文を使って、テーブル内のすべてのレコードを表示して確認しましょう。
mysql> SELECT * FROM DemoTable2022;
上記のクエリを実行すると、以下のような出力が得られます。
+---------------------------+ | Department | +---------------------------+ | Computer Science | | Information Technology | | Civil | | Mechanical | | Electronics | | Electrical | +---------------------------+ 6 rows in set (0.00 sec)
まとめ
このように、INSERT文のVALUES句に複数の値セットを「(値),(値),...」の形式で列挙することで、単一のMySQLクエリだけで1つの列に複数の値を効率的に挿入できます。個別にINSERT文を実行する方法と比べて、処理速度が向上し、コードも簡潔になるため、バッチ処理や初期データの投入などにぜひ活用してください。
-
JavaでMySQLテーブルに1つのカラムのみを挿入する方法
JavaとMySQLを連携させる際、テーブルの一部のカラムだけにデータを挿入したいケースはよくあります。その場合は、JDBCのINSERT INTOステートメントを使用します。挿入対象のカラム名を明示的に指定することで、他のカラムには影響を与えずに1つのカラムのみへ値を登録できます。この記事では、実際にテーブルを作成し、Javaのコードから「Name」という1つのカラムだけにデータを挿入する手順を解説します。1. 挿入先のテーブルを作成するまず、MySQLで以下のようにテーブルを作成しておきましょう。ここでは、varchar型の「Name」カラムを1つだけ持つシンプルなテーブルを用意します。m
-
【MySQL】SUM()関数を使って単一クエリで特定の列値ごとの複数カウントを取得する方法
特定の列値に基づくカウントを1つのMySQLクエリで複数取得するには、集計関数SUM()を活用します。MySQLでは「列 = 値」という条件式が真なら1、偽なら0を返すため、その結果をSUM()で合計することで、条件に一致する行数を数えられます。まずはサンプル用のテーブルを作成しましょう。 mysql> create table DemoTable1790 ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar(20), Score int ); Query OK, 0 rows af