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

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文を実行するよりも処理が高速なため、実務でも広く使われているテクニックです。ぜひ覚えておきましょう。

  1. Javaを使ってMySQLテーブルにレコードを挿入する方法

    はじめに本記事では、JavaのJDBC(Java Database Connectivity)を使用して、MySQLデータベースのテーブルにレコードを挿入する手順を解説します。まずテーブルを作成し、その後Javaプログラムからデータを登録するまでの一連の流れを見ていきましょう。1. MySQLでテーブルを作成するまず、データを挿入するためのテーブルを作成します。以下はMySQLでテーブルを作成するクエリです。mysql> create table DemoTable(   Id int,   Name varchar(30),&

  2. Node.jsでMySQLのレコードを更新する方法を徹底解説

    この記事では、Node.jsを使ってMySQLのレコードを更新する方法について解説します。Node.jsのサーバーから動的にMySQLテーブルの値を更新する手順を、具体的なコード例とともに見ていきましょう。更新後にはSELECT文を実行することで、レコードが正しく更新されたかどうかを確認できます。事前準備作業を始める前に、以下のコマンドがすでに実行されていることを確認してください。mkdir mysql-testcd mysql-testnpm init -ynpm install mysqlこれらの手順は、プロジェクトフォルダにNode.js用のmysqlパッケージ(依存関係)をインストール