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

MySQLでINSERTとSELECTを組み合わせて別テーブルからデータを挿入する方法

MySQLでは、INSERT文とSELECT文を組み合わせることで、別のテーブルから取得したデータをそのまま新しいテーブルに挿入できます。この記事では、その基本的な構文と具体的な使用例を解説します。

基本構文

INSERT、VALUES、SELECTを組み合わせるには、以下の構文を使用します。

insert into yourFirstTableName(yourColumnName1,yourColumnName2,.......N)
select yourColumnName1,yourColumnName2,.......N
from yourSecondTableName where yourCondition;

この構文では、2つ目のテーブル(yourSecondTableName)から条件に合致するレコードをSELECTで抽出し、1つ目のテーブル(yourFirstTableName)へ挿入します。

動作確認用のテーブルを作成する

構文を理解するために、まずレコードを受け取る側のテーブルを作成しましょう。こちらはまだレコードを持ちません。

mysql> create table CombiningInsertValuesSelect
    -> (
    -> EmployeeId varchar(10),
    -> EmployeeName varchar(100),
    -> EmployeeAge int
    -> );
Query OK, 0 rows affected (6.95 sec)

次に、元データとなる2つ目のテーブルを作成します。

mysql> create table getAllValues
    -> (
    -> Id varchar(100),
    -> Name varchar(100),
    -> Age int
    -> );
Query OK, 0 rows affected (1.12 sec)

元テーブルにレコードを挿入する

getAllValuesテーブルに、INSERTコマンドを使ってレコードを登録します。

mysql> insert into getAllValues values('EMP-1','John',26);
Query OK, 1 row affected (0.86 sec)

mysql> insert into getAllValues values('EMP-2','Carol',22);
Query OK, 1 row affected (0.36 sec)

mysql> insert into getAllValues values('EMP-3','Sam',24);
Query OK, 1 row affected (0.28 sec)

mysql> insert into getAllValues values('EMP-4','David',27);
Query OK, 1 row affected (0.25 sec)

mysql> insert into getAllValues
values('EMP-5','Bob',21);
Query OK, 1 row affected (0.75 sec)

挿入したレコードを確認する

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

mysql> select *from getAllValues;

実行結果は以下の通りです。

+-------+-------+------+
| Id    | Name  | Age  |
+-------+-------+------+
| EMP-1 | John  |   26 |
| EMP-2 | Carol |   22 |
| EMP-3 | Sam   |   24 |
| EMP-4 | David |   27 |
| EMP-5 | Bob   |   21 |
+-------+-------+------+
5 rows in set (0.00 sec)

INSERT ... SELECTを実行する

それでは、INSERTとSELECTを組み合わせたクエリを実行します。ここでは、Idが「EMP-4」のレコードだけを抽出して、最初に作成したテーブルへ挿入します。

mysql> insert into CombiningInsertValuesSelect(EmployeeId,EmployeeName,EmployeeAge)
    -> select Id,Name,Age from getAllValues where Id='EMP-4';
Query OK, 1 row affected (0.23 sec)
Records: 1 Duplicates: 0 Warnings: 0

挿入結果を検証する

最後に、SELECT文でレコードが正しく挿入されたかどうかを確認します。

mysql> select *from CombiningInsertValuesSelect;

実行結果は以下の通りです。

+------------+--------------+-------------+
| EmployeeId | EmployeeName | EmployeeAge |
+------------+--------------+-------------+
| EMP-4      | David        | 27          |
+------------+--------------+-------------+
1 row in set (0.00 sec)

このように、WHERE句で条件を指定すれば、元テーブルから必要なレコードだけを選択的に別テーブルへコピーできます。条件を外せば全レコードの一括コピーも可能なので、テーブル間のデータ移行やバックアップ作成など、さまざまな場面で活用できる便利なテクニックです。

  1. MySQLテーブルで先頭ゼロ付きの値を選択して挿入する方法

    MySQLで連番に先頭ゼロ(先行ゼロ)を付けた値をテーブルに挿入したい場合は、INSERT INTO SELECT文とLPAD()関数を組み合わせることで実現できます。LPAD()は文字列を指定した長さまで左側を特定の文字で埋める関数で、これを使えば「001」「002」のような形式のIDを簡単に生成できます。テーブルの作成まず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable1967 ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, UserId varchar(20)

  2. MySQLでSELECTとSHOWコマンドの結果を1つに結合する方法

    はじめにMySQLでは、SELECT文やSHOWコマンドの実行結果を、ユーザー定義変数(セッション変数)を活用することで1つの結果セットにまとめることができます。この記事では、その具体的な方法をサンプルコード付きで解説します。基本的な構文複数のコマンド結果を1つに結合するには、以下のようなクエリを使用します。各変数に別名(エイリアス)を付けて出力するのがポイントです。select @任意の変数名1 as 別名1, @任意の変数名2 as 別名2, ......N;手順1:最初の変数を作成・初期化するまず、結合したい値を格納するための最初の変数を作成し、初期化します。mysql> set