MySQLのCONCAT()関数を使って複雑なINSERT文を実行する方法
MySQLで複雑なINSERT文を実行したい場合、CONCAT()関数を活用すると便利です。この記事では、StudentId(学生ID)とStudentFirstName(学生の名前)を持つテーブルを例に、その具体的な使い方を解説します。
複雑なINSERTを実行すると、すべての値に対して「Web Student」というテキストが挿入され、一意のStudentIdが文字列として連結されます。
1. 最初のテーブルを作成する
まず、以下のクエリでテーブルを作成します。
mysql> create table DemoTable
(
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentFirstName varchar(20)
);
Query OK, 0 rows affected (0.55 sec)
2. レコードを挿入する
INSERTコマンドを使って、テーブルにいくつかのレコードを追加します。
mysql> insert into DemoTable(StudentFirstName) values('John');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(StudentFirstName) values('Larry');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(StudentFirstName) values('Bob');
Query OK, 1 row affected (0.13 sec)3. テーブルの内容を確認する
SELECT文でテーブル内のすべてのレコードを表示します。
mysql> select *from DemoTable;
実行結果は以下の通りです。
+-----------+------------------+
| StudentId | StudentFirstName |
+-----------+------------------+
| 1 | John |
| 2 | Larry |
| 3 | Bob |
+-----------+------------------+
3 rows in set (0.00 sec)
4. 2つ目のテーブルを作成する
次に、データの挿入先となる2つ目のテーブルを作成します。
mysql> create table DemoTable2
(
ClientId int,
ClientProjectName varchar(20)
);
Query OK, 0 rows affected (0.54 sec)
5. CONCAT()を使った複雑なINSERTを実行する
ここが本題です。SELECT文とCONCAT()関数を組み合わせることで、元テーブルの値に文字列を連結しながら、別テーブルへ一括挿入できます。
mysql> insert into DemoTable2 select StudentId,concat('Web Student=', StudentId) from DemoTable;
Query OK, 3 rows affected (0.17 sec)
Records : 3 Duplicates : 0 Warnings : 06. 挿入結果を確認する
SELECT文で2つ目のテーブルの全レコードを表示してみましょう。
mysql> select *from DemoTable2;
実行結果は以下の通りです。
+----------+-------------------+
| ClientId | ClientProjectName |
+----------+-------------------+
| 1 | Web Student=1 |
| 2 | Web Student=2 |
| 3 | Web Student=3 |
+----------+-------------------+
3 rows in set (0.00 sec)
まとめ
このように、INSERT ... SELECT文とCONCAT()関数を組み合わせることで、既存テーブルのデータに任意の文字列を連結しながら、別のテーブルへ効率的にデータを挿入できます。一意のIDに接頭辞やラベルを付けて別テーブルへコピーしたい場合など、実務でもよく使われるテクニックなので、ぜひ覚えておきましょう。
-
JDBCを使ってMySQLデータベースにファイルを保存・挿入する方法
一般的に、ファイルの内容はMySQLデータベースでは Clob 型(TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT)のカラムに保存されます。 JDBCはClob型をサポートしており、これを利用することでファイルの内容をデータベースのテーブルに格納できます。 PreparedStatement インターフェースが提供する setCharacterStream() メソッドは、パラメータのインデックス(位置)を表す整数と、Readerオブジェクトを引数として受け取ります。 このメソッドを使うと、指定したインデックスのプレースホルダ(?)に対して、Readerオブジェクト(ファイ
-
Javaを使ってDATE型の値をMySQLカラムに挿入する方法【PreparedStatement活用】
はじめに JavaからMySQLのDATE型カラムに日付データを挿入したい場合、PreparedStatementを使用するのが最も安全で推奨される方法です。SQLインジェクション対策にもなり、日付型の変換もスムーズに行えます。 本記事では、Javaプログラムから現在の日付をMySQLテーブルに挿入する手順を、サンプルコード付きでわかりやすく解説します。 1. サンプルテーブルの作成 まず、DATE型のカラム「ArrivalDate」を含むテーブルを作成します。以下はMySQLでの作成例です。 mysql> create table DemoTable( PassengerId