SQL でINSERT SELECTを使う方法!効率的なデータ移行・コピーを徹底解説!

こんにちは、阿久梨絵です!
INSERT SELECT は、別のテーブルのデータを利用して新しいテーブルへデータを挿入する SQL 構文 です。
通常の INSERT では、値を直接指定してレコードを追加しますが、INSERT SELECT を使うと 既存のデータをコピー&移行 できます。

簡単に言えば、「別のテーブルのデータをそのまま新しいテーブルに追加する」ための便利な手法!

INSERT SELECTの基本的な使い方

基本構文

INSERT INTO new_table (column1, column2, column3)
SELECT column1, column2, column3 FROM old_table;

「old_table」のデータをそのまま「new_table」にコピー

条件を指定してデータを移行

特定の条件を満たすデータだけを挿入できます。

INSERT INTO new_table (id, name, price)
SELECT id, name, price FROM old_table WHERE price > 5000;

price が 5000 円以上のデータのみ」を新テーブルへ移動!

列の加工・変更

データをコピーしながら、列の値を変更することも可能

INSERT INTO new_table (id, full_name, created_at)
SELECT id, CONCAT(first_name, ‘ ‘, last_name), NOW()
FROM old_table;

「氏名を連結」「現在の日時を追加」など、加工しながらデータ移行

INSERT SELECTを使う場面

テーブル構造を変更したとき → 新しいテーブルへデータ移行
データのバックアップ作成 → 既存のデータを別のテーブルへ保存
条件付きデータ移行 → 必要なデータだけを抽出してコピー
大量データの一括登録 → 既存データを活用して効率よく新規登録

手動入力ではなく「SELECT結果」をそのままコピーできるので、大量データの処理が圧倒的に楽になります!

実際に使う際の注意点

データ型を一致させる → SELECT するカラムと INSERT 先のカラムが適合するか確認
NULL値の扱いに注意 → COALESCE() を使ってデフォルト値を設定
制約違反のチェック → UNIQUE や NOT NULL 制約が適用されている場合、移行前に確認
大量データの場合はパフォーマンス最適化 → INDEX や BULK INSERT との併用が有効

まとめ

INSERT SELECTを使えば、既存データを簡単に別のテーブルへコピー・移行できる!
条件付き移行やデータ加工を組み合わせれば、柔軟なデータ操作が可能!
実行前にデータ型や制約の確認を行い、スムーズな移行を実現!

データベースの管理・移行を効率化するには、INSERT SELECTをぜひ活用しましょう!
阿久梨絵でした!

Verified by MonsterInsights