MySQLでSELECT文を使ってレコードを挿入する方法
MySQLでSELECT文を使用したレコード挿入の基本
MySQLでは、INSERT INTO SELECT文を使うことで、別のテーブルからSELECT文で取得したデータをそのまま新しいテーブルに挿入できます。この方法は、テーブル間でのデータコピーや、条件に合致するレコードだけを抽出して登録したい場合に非常に便利です。
ここでは、実際の手順をサンプルコードとともに詳しく解説していきます。
ステップ1:元となるテーブルを作成する
まず、データのコピー元となるテーブル「DemoTable1」を作成します。
mysql> create table DemoTable1
-> (
-> Id int,
-> FirstName varchar(20)
-> );
Query OK, 0 rows affected (0.71 sec)
ステップ2:INSERTコマンドでレコードを追加する
次に、insertコマンドを使ってDemoTable1にいくつかのレコードを追加します。あえてNULL値を含むレコードも挿入しておきましょう。
mysql> insert into DemoTable1 values(101,'Chris');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1 values(NULL,'Bob');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable1 values(NULL,NULL);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1 values(102,'David');
Query OK, 1 row affected (0.20 sec)
ステップ3:テーブルの内容を確認する
select文ですべてのレコードを表示してみます。
mysql> select *from DemoTable1;
実行結果は以下のとおりです。IdまたはFirstNameがNULLになっているレコードが混在しているのがわかります。
+------+-----------+
| Id | FirstName |
+------+-----------+
| 101 | Chris |
| NULL | Bob |
| NULL | NULL |
| 102 | David |
+------+-----------+
4 rows in set (0.00 sec)
ステップ4:挿入先のテーブルを作成する
続いて、データの挿入先となる2つ目のテーブル「DemoTable2」を作成します。
mysql> create table DemoTable2
-> (
-> StudentId int,
-> StudentName varchar(20)
-> );
Query OK, 0 rows affected (1.10 sec)
ステップ5:INSERT INTO SELECT文でレコードを挿入する
ここが本記事のポイントです。SELECT文の結果をそのまま挿入するには、以下のように記述します。WHERE句にIS NOT NULL条件を指定することで、NULL値を含むレコードを除外できます。
mysql> insert into DemoTable2
-> select Id,FirstName from DemoTable1
-> where Id IS NOT NULL and FirstName IS NOT NULL;
Query OK, 2 rows affected (0.17 sec)
Records: 2 Duplicates: 0 Warnings: 0
実行結果を見ると、「2 rows affected」と表示されており、NULL値を除いた2件のレコードのみが挿入されたことが確認できます。
ステップ6:挿入結果を確認する
最後に、DemoTable2の内容をselect文で表示して結果を確かめましょう。
mysql> select *from DemoTable2;
+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 101 | Chris |
| 102 | David |
+-----------+-------------+
2 rows in set (0.00 sec)
まとめ
このように、INSERT INTO SELECT文を活用すれば、既存テーブルのデータを簡単に別テーブルへコピーできます。さらにWHERE句でIS NOT NULLなどの条件を組み合わせることで、必要なレコードだけを効率的に抽出・挿入することが可能です。
大量のデータを扱う場合でも、INSERT INTO SELECTは個別にINSERT文を実行するよりも処理が高速なため、実務でも広く使われているテクニックです。ぜひ覚えておきましょう。
-
Javaを使ってMySQLテーブルにレコードを挿入する方法
はじめに本記事では、JavaのJDBC(Java Database Connectivity)を使用して、MySQLデータベースのテーブルにレコードを挿入する手順を解説します。まずテーブルを作成し、その後Javaプログラムからデータを登録するまでの一連の流れを見ていきましょう。1. MySQLでテーブルを作成するまず、データを挿入するためのテーブルを作成します。以下はMySQLでテーブルを作成するクエリです。mysql> create table DemoTable( Id int, Name varchar(30),&
-
Node.jsでMySQLのレコードを更新する方法を徹底解説
この記事では、Node.jsを使ってMySQLのレコードを更新する方法について解説します。Node.jsのサーバーから動的にMySQLテーブルの値を更新する手順を、具体的なコード例とともに見ていきましょう。更新後にはSELECT文を実行することで、レコードが正しく更新されたかどうかを確認できます。事前準備作業を始める前に、以下のコマンドがすでに実行されていることを確認してください。mkdir mysql-testcd mysql-testnpm init -ynpm install mysqlこれらの手順は、プロジェクトフォルダにNode.js用のmysqlパッケージ(依存関係)をインストール