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

MySQLであるテーブルから別のテーブルへINSERT INTOし、特定の列に固定値を設定する方法

MySQLでは、INSERT INTO ... SELECT文を活用することで、既存テーブルのデータを別のテーブルへコピーしながら、同時に特定の列へ固定値を設定できます。本記事では、実際のSQLクエリ例を通じてその手順をわかりやすく解説します。

手順1:元となるテーブルを作成する

まず、コピー元となるテーブルを作成します。以下がそのクエリです。

mysql> create table insertOneToAnotherTable
    -> (
    -> Value int
    -> );
Query OK, 0 rows affected (0.60 sec)

手順2:テーブルにレコードを挿入する

次に、INSERTコマンドを使用して、作成したテーブルにいくつかのレコードを追加します。

mysql> insert into insertOneToAnotherTable values(100);
Query OK, 1 row affected (0.08 sec)

mysql> insert into insertOneToAnotherTable values(200);
Query OK, 1 row affected (0.15 sec)

mysql> insert into insertOneToAnotherTable values(300);
Query OK, 1 row affected (0.13 sec)

mysql> insert into insertOneToAnotherTable values(400);
Query OK, 1 row affected (0.15 sec)

mysql> insert into insertOneToAnotherTable values(500);
Query OK, 1 row affected (0.12 sec)

mysql> insert into insertOneToAnotherTable values(600);
Query OK, 1 row affected (0.16 sec)

手順3:挿入したデータを確認する

SELECT文を使って、テーブル内のすべてのレコードを表示してみましょう。

mysql> select * from insertOneToAnotherTable;

実行すると、以下のような結果が出力されます。

+-------+
| Value |
+-------+
| 100   |
| 200   |
| 300   |
| 400   |
| 500   |
| 600   |
+-------+
6 rows in set (0.00 sec)

手順4:コピー先のテーブルを作成する

続いて、データの受け皿となる2つ目のテーブルを作成します。このテーブルは2つの列を持つ構造です。

mysql> create table recieveDateFromTable
    -> (
    -> Value1 int,
    -> Value2 int
    -> );
Query OK, 0 rows affected (0.83 sec)

手順5:INSERT INTO ... SELECTでデータをコピーしつつ固定値を設定する

ここがポイントです。INSERT INTO ... SELECT文では、SELECT句の中に直接リテラル値(ここでは1000)を記述することで、元テーブルには存在しない値を新しい列に設定できます。

mysql> insert into recieveDateFromTable(Value1,Value2) select Value,1000 from
insertOneToAnotherTable;
Query OK, 6 rows affected (0.14 sec)
Records: 6 Duplicates: 0 Warnings: 0

上記のクエリでは、元テーブルの「Value」列の値が「Value1」にコピーされ、「Value2」にはすべての行に対して「1000」という固定値が設定されます。

手順6:結果を確認する

最後に、2つ目のテーブルの全レコードを表示して結果を確認しましょう。

mysql> select * from recieveDateFromTable;

実行すると、以下のような結果が出力されます。

+--------+--------+
| Value1 | Value2 |
+--------+--------+
| 100    | 1000   |
| 200    | 1000   |
| 300    | 1000   |
| 400    | 1000   |
| 500    | 1000   |
| 600    | 1000   |
+--------+--------+
6 rows in set (0.00 sec)

まとめ

INSERT INTO ... SELECT文のSELECT句にリテラル値を含めるだけで、テーブル間のデータコピーと固定値の設定を1つのクエリで実現できます。WHERE句やJOINと組み合わせれば、より柔軟な条件でのデータ移行も可能になるため、覚えておくと非常に便利なテクニックです。

  1. MySQLで列の値から先頭の1文字を取り出し、別の列に挿入する方法

    はじめにMySQLである列(カラム)の値から先頭の1文字を取り出し、それを別の列に格納したい場合があります。このようなときに便利なのが LEFT() 関数です。LEFT() 関数は、文字列の左端から指定した文字数だけを抽出することができます。ここでは、実際にテーブルを作成しながら、その手順を順番に解説していきます。1. テーブルを作成するまず、サンプル用のテーブルを作成しましょう。ここでは「FirstLetter」(先頭文字を格納する列)と「Title」(元となる文字列の列)の2つの列を持つテーブルを定義します。mysql> create table DemoTable2036 

  2. MySQLのINSERT INTO SELECT文で別のテーブルの値を挿入する方法

    あるテーブルの値を基に別のテーブルへデータを挿入したい場合は、INSERT INTO SELECT文を使用します。この構文では、SELECT文で抽出した結果セットをそのまま対象テーブルへ流し込めるため、テーブル間のデータ移行やコピーにもっとも効率的な方法の一つです。 以下の手順で、実際の動作を順番に確認していきましょう。 手順1:元となるテーブルを作成する まず、データのコピー元となるテーブル「demo82」を作成します。 mysql> create table demo82     -> (