データベースにデータを追加する際、INSERT 文は基本中の基本ですが、1件ずつ追加していると処理に時間がかかることがあります。特に大量のデータを扱う場合、効率の悪い INSERT を繰り返すとパフォーマンスの低下を招き、トランザクション管理も煩雑になります。
そこで本記事では、Oracleで複数のデータを一括でINSERTする方法について詳しく解説します。
わかりやすく解説していきますので、ぜひ最後までご覧ください!
基本的なINSERT文の解説はこちらでしています↓

複数行INSERTの方法
大量のデータを効率よく追加するために、Oracleでは1回のSQL実行で複数の行を挿入できる方法がいくつか提供されています。ここでは、INSERT ALL や INSERT 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 ALL や INSERT 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;new_employeesからid, name, departmentを取得。- 取得したデータを
employeesテーブルに追加。 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方法を選択することで、パフォーマンスを向上させつつ、処理の負荷を最小限に抑えることができます。
実際の業務に応じて最適な方法を選び、効率的なデータ処理を実現しましょう!
最後までお読みいただき、ありがとうございました!

コメント