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

MySQLのINSERT INTO SELECT文で静的な値を追加する方法【実例つき】

MySQLでは、INSERT INTO ... SELECTクエリを使って別テーブルからデータをコピーする際に、同時に静的な値(固定値)を追加できます。追加方法は主に2つあります。SELECT文に値を直接記述する方法と、事前に初期化した変数を使う方法です。

ケース1: SELECT文に静的な値を直接記述する

最もシンプルなのは、INSERT INTO SELECT文の中に固定値をそのまま書き込む方法です。構文は以下の通りです。

INSERT INTO yourSecondTableName(yourColumnName1,yourColumnName2,....N)
    SELECT yourColumnName1 ,yourColumnName2,.....N,yourStaticValue from yourFirstTableName;

ケース2: 変数を使用して静的な値を追加する

SET文であらかじめ値を変数に格納しておき、SELECT句の中でその変数を参照することも可能です。構文は以下の通りです。

SET @yourVariableName = yourstaticValue;
    INSERT INTO yourSecondTableName(yourColumnName1,yourColumnName2,....N)
    SELECT yourColumnName1 ,yourColumnName2,.....N,@yourVariableName from yourFirstTableName;

実際に動作を確認してみよう

ここからは、2つのテーブルを使って上記の構文がどのように動作するかを具体的に見ていきます。1つ目のテーブルには元データとなるレコードを格納し、2つ目のテーブルへINSERT INTO SELECT文でコピーしながら、静的な値を第3カラムに追加します。

手順1: 最初のテーブルを作成する

まず、テーブル作成用のクエリは次の通りです。

mysql> create table First_table
    -> (
    -> Id int NOT NULL AUTO_INCREMENT,
    -> FirstValue int,
    -> SecondValue int,
    -> PRIMARY KEY(Id)
    -> );
Query OK, 0 rows affected (0.56 sec)

続いて、INSERTコマンドでサンプルレコードを挿入します。

mysql> insert into First_table(FirstValue,SecondValue) values(10,14);
Query OK, 1 row affected (0.20 sec)

mysql> insert into First_table(FirstValue,SecondValue) values(12,13);
Query OK, 1 row affected (0.52 sec)

mysql> insert into First_table(FirstValue,SecondValue) values(100,110);
Query OK, 1 row affected (0.14 sec)

mysql> insert into First_table(FirstValue,SecondValue) values(45,55);
Query OK, 1 row affected (0.27 sec)

SELECT文ですべてのレコードを表示して確認しましょう。

mysql> select *from First_table;

出力結果は以下の通りです。

+----+------------+-------------+
| Id | FirstValue | SecondValue |
+----+------------+-------------+
|  1 |         10 |          14 |
|  2 |         12 |          13 |
|  3 |        100 |         110 |
|  4 |         45 |          55 |
+----+------------+-------------+
4 rows in set (0.00 sec)

手順2: 2つ目のテーブルを作成する

次に、データのコピー先となるテーブルを作成します。

mysql> create table Second_table
    -> (
    -> Id int NOT NULL AUTO_INCREMENT,
    -> Value1 int,
    -> Value2 int,
    -> Value3 int,
    -> PRIMARY KEY(Id)
    -> );
Query OK, 0 rows affected (0.81 sec)

このテーブルには3つのカラムがあります。Value1とValue2には1つ目のテーブルから取得した値が入り、Value3には静的な値が直接または間接的に代入される仕組みです。

ケース1の実行例: 固定値「45」を追加する

SELECT句に直接「45」を記述して、第3カラムに静的な値を追加してみます。

mysql> insert into Second_table(Value1,Value2,Value3)
    -> select FirstValue,SecondValue,45 from First_table;
Query OK, 4 rows affected (0.16 sec)
Records: 4 Duplicates: 0 Warnings: 0

SELECT文で結果を確認すると、すべての行のValue3に「45」が設定されていることがわかります。

+----+--------+--------+--------+
| Id | Value1 | Value2 | Value3 |
+----+--------+--------+--------+
|  1 |     10 |     14 | 45     |
|  2 |     12 |     13 | 45     |
|  3 |    100 |    110 | 45     |
|  4 |     45 |     55 | 45     |
+----+--------+--------+--------+
4 rows in set (0.00 sec)

ケース2の実行例: 変数を使って値「20」を追加する

今度はSET文で変数@staticValueに20を代入し、それをSELECT句内で利用します。

mysql> set @staticValue = 20;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into Second_table(Value1,Value2,Value3)
    -> select FirstValue,SecondValue,@staticValue from First_table;
Query OK, 4 rows affected (0.19 sec)
Records: 4 Duplicates: 0 Warnings: 0

再度テーブルの内容を確認すると、全行のValue3に「20」が挿入されていることが確認できます。

+----+--------+--------+--------+
| Id | Value1 | Value2 | Value3 |
+----+--------+--------+--------+
|  1 |     10 |     14 |     20 |
|  2 |     12 |     13 |     20 |
|  3 |    100 |    110 |     20 |
|  4 |     45 |     55 |     20 |
+----+--------+--------+--------+
4 rows in set (0.00 sec)

まとめ

INSERT INTO SELECT文でテーブル間のデータコピーを行う際も、SELECT句に固定値を直接書くか、SET文で初期化したユーザー定義変数を使うことで、簡単に静的な値を追加できます。変数を使う方法は、同じスクリプト内で値を使い回したい場合や、後から値を変更したい場合に特に便利です。

  1. JavaでMySQLデータベースにデータを挿入する方法をわかりやすく解説

    JavaからMySQLデータベースにデータを挿入するには、SQLのINSERTコマンドを使用します。基本的な構文は以下の通りです。 INSERT INTO テーブル名(カラム名1, カラム名2, ......カラム名N) VALUES(値1, 値2, ......値N); ここからは、Javaプログラムを使って実際にMySQLデータベースへレコードを挿入する手順を、順を追って見ていきましょう。 ステップ1:MySQLでテーブルを作成する まず、データの挿入先となるテーブルをMySQL側に作成します。以下のクエリを実行してください。 mysql> create table Insert

  2. Javaを使ってDATE型の値をMySQLカラムに挿入する方法【PreparedStatement活用】

    はじめに JavaからMySQLのDATE型カラムに日付データを挿入したい場合、PreparedStatementを使用するのが最も安全で推奨される方法です。SQLインジェクション対策にもなり、日付型の変換もスムーズに行えます。 本記事では、Javaプログラムから現在の日付をMySQLテーブルに挿入する手順を、サンプルコード付きでわかりやすく解説します。 1. サンプルテーブルの作成 まず、DATE型のカラム「ArrivalDate」を含むテーブルを作成します。以下はMySQLでの作成例です。 mysql> create table DemoTable( PassengerId