【Oracle】複数のデータをまとめてINSERTする方法を解説!

スポンサーリンク

データベースにデータを追加する際、INSERT 文は基本中の基本ですが、1件ずつ追加していると処理に時間がかかることがあります。特に大量のデータを扱う場合、効率の悪い INSERT を繰り返すとパフォーマンスの低下を招き、トランザクション管理も煩雑になります。

そこで本記事では、Oracleで複数のデータを一括でINSERTする方法について詳しく解説します。

わかりやすく解説していきますので、ぜひ最後までご覧ください!

複数行INSERTの方法

大量のデータを効率よく追加するために、Oracleでは1回のSQL実行で複数の行を挿入できる方法がいくつか提供されています。ここでは、INSERT ALLINSERT FIRST を使って、複数のデータを一括で追加する方法を紹介します。

INSERT ALL を使用する方法

INSERT ALL を使うと、1つのSQL文で複数の行を挿入できます。すべてのINSERT文を実行するのが特徴です。

基本構文

INSERT ALL
    INTO テーブル名 (列1, 列2, …) VALUES (値1_1, 値1_2, …)
    INTO テーブル名 (列1, 列2, …) VALUES (値2_1, 値2_2, …)
    ...
SELECT * FROM dual;

使用例

例えば、employees テーブルに3人のデータを一括で追加する場合、以下のように記述します。

INSERT ALL
    INTO employees (id, name, department) VALUES (1, '田中一郎', '営業')
    INTO employees (id, name, department) VALUES (2, '鈴木次郎', '開発')
    INTO employees (id, name, department) VALUES (3, '佐藤三郎', '人事')
SELECT * FROM dual;

ポイント

  • SELECT * FROM dual; を指定することで、単一のSQL文として実行可能。
  • 大量データの挿入時にパフォーマンスが向上し、INSERT を繰り返すよりも負荷が軽減される。
  • すべてのINSERTが実行されるため、条件分岐が不要な場合に適している。

INSERT FIRST を使用する方法

INSERT FIRST は、 INSERT ALL と似ていますが、最初に条件を満たしたINSERT文のみを実行するのが特徴です。

基本構文

INSERT FIRST
    WHEN 条件1 THEN
        INTO テーブル名 (列1, 列2, …) VALUES (値1_1, 値1_2, …)
    WHEN 条件2 THEN
        INTO テーブル名 (列1, 列2, …) VALUES (値2_1, 値2_2, …)
    ...
SELECT * FROM データソース;

使用例

例えば、新しい従業員データを部門ごとに振り分けて追加する場合、以下のように記述できます。

INSERT FIRST
    WHEN department = '営業' THEN
        INTO sales_team (id, name, department) VALUES (id, name, department)
    WHEN department = '開発' THEN
        INTO dev_team (id, name, department) VALUES (id, name, department)
SELECT id, name, department FROM new_employees;

ポイント

  • INSERT FIRST最初に条件を満たしたINSERTのみ実行し、他の条件はスキップされる。
  • 異なるテーブルにデータを振り分ける処理に便利
  • INSERT ALL とは異なり、複数の条件に合致しても最初の1つしか実行されない点に注意。

INSERT ALLINSERT FIRST を活用することで、複数行のデータを効率的にINSERTできます。

INSERT INTO … SELECT を使った方法

INSERT INTO ... SELECT は、既存のテーブルやビューからデータを取得し、一括で別のテーブルに挿入する方法です。データをコピーする際に非常に効率が良く、手動でデータを入力する手間を省くことができます。

基本構文

INSERT INTO 追加先テーブル (列1, 列2, …)  
SELECT 列1, 列2, … FROM 元テーブル  
WHERE 条件;

ポイント

  • SELECT 文を使って取得したデータをそのままINSERTできる。
  • WHERE 句を指定することで、必要なデータのみ抽出して挿入可能。
  • JOIN を使うことで、複数のテーブルを組み合わせたデータをINSERTできる。

使用例:テーブルのデータをコピー

new_employees テーブルにあるデータを employees テーブルに追加する場合、以下のSQLを実行します。

INSERT INTO employees (id, name, department)  
SELECT id, name, department FROM new_employees;
  1. new_employees から id, name, department を取得。
  2. 取得したデータを employees テーブルに追加。
  3. new_employees 内の全データが employees に挿入される。

WHERE句を使って特定のデータのみ追加

例えば、new_employees テーブルの中から開発部門の社員のみをemployees テーブルに追加する場合は、以下のように書きます。

INSERT INTO employees (id, name, department)  
SELECT id, name, department FROM new_employees  
WHERE department = '開発';

JOINを使って複数のテーブルからデータを取得しINSERT

例えば、new_employees テーブルと departments テーブルを結合し、部門名を付加したデータを employees テーブルに追加する場合は、次のように書けます。

INSERT INTO employees (id, name, department)  
SELECT ne.id, ne.name, d.department_name  
FROM new_employees ne  
JOIN departments d ON ne.department_id = d.department_id;
  • JOIN を使うことで、複数のテーブルのデータを組み合わせて挿入できる。
  • 例えば、department_id を持っている new_employees に対し、departments から実際の部門名を取得し、employees に登録可能。
  • 複雑なデータ移行やデータ加工に役立つ

INSERT INTO ... SELECT は、既存データを効率的にコピー・挿入する最適な方法です。

まとめ

本記事では、Oracleで複数のデータをまとめてINSERTする方法について詳しく解説しました。

Oracleで大量のデータを扱う際、適切なINSERT方法を選択することで、パフォーマンスを向上させつつ、処理の負荷を最小限に抑えることができます。

実際の業務に応じて最適な方法を選び、効率的なデータ処理を実現しましょう!

最後までお読みいただき、ありがとうございました!

コメント