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と組み合わせれば、より柔軟な条件でのデータ移行も可能になるため、覚えておくと非常に便利なテクニックです。
-
MySQLで列の値から先頭の1文字を取り出し、別の列に挿入する方法
はじめにMySQLである列(カラム)の値から先頭の1文字を取り出し、それを別の列に格納したい場合があります。このようなときに便利なのが LEFT() 関数です。LEFT() 関数は、文字列の左端から指定した文字数だけを抽出することができます。ここでは、実際にテーブルを作成しながら、その手順を順番に解説していきます。1. テーブルを作成するまず、サンプル用のテーブルを作成しましょう。ここでは「FirstLetter」(先頭文字を格納する列)と「Title」(元となる文字列の列)の2つの列を持つテーブルを定義します。mysql> create table DemoTable2036 
-
MySQLのINSERT INTO SELECT文で別のテーブルの値を挿入する方法
あるテーブルの値を基に別のテーブルへデータを挿入したい場合は、INSERT INTO SELECT文を使用します。この構文では、SELECT文で抽出した結果セットをそのまま対象テーブルへ流し込めるため、テーブル間のデータ移行やコピーにもっとも効率的な方法の一つです。 以下の手順で、実際の動作を順番に確認していきましょう。 手順1:元となるテーブルを作成する まず、データのコピー元となるテーブル「demo82」を作成します。 mysql> create table demo82 -> (