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

MySQLで1つのテーブルから別のテーブルに行をコピーする方法【INSERT INTO SELECT文の使い方】

MySQLでテーブル間の行コピーを実現する方法

MySQLであるテーブルから別のテーブルへ行(レコード)をコピーしたい場合は、INSERT INTO SELECT文を使用します。この文を使えば、SELECT句で取得したデータをそのまま別のテーブルに挿入できるため、WHERE句による条件指定と組み合わせれば、必要な行だけを効率よくコピーすることも可能です。

ここでは、実際にサンプルテーブルを作成し、行をコピーする手順を順番に解説します。

手順1:コピー元のテーブルを作成する

まず、コピー元となるテーブル「DemoTable1879」を作成します。

mysql> create table DemoTable1879
    (
    Id int,
    Name varchar(20)
    );
Query OK, 0 rows affected (0.00 sec)

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

INSERTコマンドを使って、いくつかのレコードを挿入します。

mysql> insert into DemoTable1879 values(101,'Chris Brown');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1879 values(102,'David Miller');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1879 values(103,'Adam Smith');
Query OK, 1 row affected (0.00 sec)

手順3:テーブルの中身を確認する

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

mysql> select * from DemoTable1879;

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

+------+--------------+
| Id   | Name         |
+------+--------------+
|  101 | Chris Brown  |
|  102 | David Miller |
|  103 | Adam Smith   |
+------+--------------+
3 rows in set (0.00 sec)

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

次に、コピー先となる2つ目のテーブル「DemoTable1880」を作成します。カラム名は異なっていても問題ありませんが、データ型には注意してください。

mysql> create table DemoTable1880
    (
    ClientId int,
    ClientName varchar(20)
    );
Query OK, 0 rows affected (0.00 sec)

手順5:INSERT INTO SELECT文で行をコピーする

いよいよINSERT INTO SELECT文を使って、コピー元からコピー先へ行をコピーします。以下の例では、WHERE句とIN演算子を組み合わせて、Idが101と103のレコードだけを選択的にコピーしています。

mysql> insert into DemoTable1880(ClientId,ClientName) select Id,Name from DemoTable1879 where Id IN(101,103);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

このように、SELECT句で指定したカラム(Id, Name)の値が、INSERT句で指定したカラム(ClientId, ClientName)に対応して挿入されます。

手順6:コピー結果を確認する

最後に、コピー先のテーブルをSELECT文で確認しましょう。

mysql> select * from DemoTable1880;

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

+----------+-------------+
| ClientId | ClientName  |
+----------+-------------+
|      101 | Chris Brown |
|      103 | Adam Smith  |
+----------+-------------+
2 rows in set (0.00 sec)

まとめ

MySQLでテーブル間の行コピーを行うには、INSERT INTO SELECT文が便利です。ポイントは以下の通りです。

  • INSERT句にはコピー先のカラム名を、SELECT句にはコピー元のカラム名を指定する
  • WHERE句を使えば、特定の条件に合致する行だけをコピーできる
  • カラム名が異なるテーブル間でも、データ型さえ一致していればコピー可能

なお、全件をそのままコピーしたい場合は、WHERE句を省略してinsert into コピー先 select * from コピー元;のように記述することもできます。状況に応じて使い分けてください。

  1. MySQLであるデータベースから別のデータベースへテーブルをコピーする方法

    MySQLでは、INSERT INTO ... SELECT構文を使うことで、あるデータベースのテーブルデータを別のデータベースへ簡単にコピーできます。 テーブルをコピーする基本構文 別のデータベースへテーブルをコピーする際の基本的な構文は以下の通りです。 INSERT INTO コピー先データベース名.テーブル名 SELECT * FROM コピー元データベース名.テーブル名; それでは、実際のコマンド例を使いながら手順を詳しく見ていきましょう。 ステップ1:コピー元のテーブルを作成する まず、CREATEコマンドを使って「business」データベース内に新しいテーブルを作成します。

  2. MySQLでテーブルの最後の10件のレコードを取得する方法

    MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected