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 コピー元;のように記述することもできます。状況に応じて使い分けてください。
-
MySQLであるデータベースから別のデータベースへテーブルをコピーする方法
MySQLでは、INSERT INTO ... SELECT構文を使うことで、あるデータベースのテーブルデータを別のデータベースへ簡単にコピーできます。 テーブルをコピーする基本構文 別のデータベースへテーブルをコピーする際の基本的な構文は以下の通りです。 INSERT INTO コピー先データベース名.テーブル名 SELECT * FROM コピー元データベース名.テーブル名; それでは、実際のコマンド例を使いながら手順を詳しく見ていきましょう。 ステップ1:コピー元のテーブルを作成する まず、CREATEコマンドを使って「business」データベース内に新しいテーブルを作成します。
-
MySQLでテーブルの最後の10件のレコードを取得する方法
MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected