データベースにデータを追加する際、INSERT
文は基本中の基本ですが、1件ずつ追加していると処理に時間がかかることがあります。特に大量のデータを扱う場合、効率の悪い INSERT
を繰り返すとパフォーマンスの低下を招き、トランザクション管理も煩雑になります。
そこで本記事では、Oracleで複数のデータを一括で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
方法を選択することで、パフォーマンスを向上させつつ、処理の負荷を最小限に抑えることができます。
実際の業務に応じて最適な方法を選び、効率的なデータ処理を実現しましょう!
最後までお読みいただき、ありがとうございました!
コメント