【Oracle】結合を用いたデータ更新の方法

Oracleデータベースを利用している開発者にとって、結合を使用したデータの更新はよくある作業の一つです。本記事では、Oracle SQLでの結合を用いたデータ更新の基本的な方法を解説します。具体的な例を交えながら、効率的にデータを操作する方法を学びましょう。

テーブルの例

まずは、例として使用するテーブルを紹介します。以下の2つのテーブルを使用します。

employees テーブル
列名 データ型 説明
employee_id NUMBER 主キー
first_name VARCHAR2 従業員の名
last_name VARCHAR2 従業員の姓
salary NUMBER 給与
department_id NUMBER 部門ID
departments テーブル
列名 データ型 説明
department_id NUMBER 主キー
department_name VARCHAR2 部門名
location_id NUMBER 所在地ID

基本的な結合を用いた更新

結合を使用してデータを更新する基本的な方法を見てみましょう。例えば、employeesテーブルのsalaryを、departmentsテーブルのlocation_idが特定の値である場合に10%増加させるには、以下のようにします。

UPDATE employees e
SET e.salary = e.salary * 1.10
WHERE e.department_id IN (
  SELECT d.department_id
  FROM departments d
  WHERE d.location_id = 1700
);

このクエリは、location_idが1700である部門に所属する全ての従業員の給与を10%増加させます。

結合を用いたより複雑な更新

次に、結合を使って、異なるテーブルの情報に基づいて更新する方法を紹介します。例えば、employeesテーブルのdepartment_idがdepartmentsテーブルのdepartment_idに一致する場合、departmentsテーブルのlocation_idが特定の値である従業員のsalaryを増加させる場合です。

UPDATE (SELECT e.salary
        FROM employees e
        JOIN departments d
        ON e.department_id = d.department_id
        WHERE d.location_id = 1700)
SET salary = salary * 1.10;

このクエリは、サブクエリ内で結合を使用して対象の行を選択し、それに基づいて給与を更新します。

MERGE文を使用した更新

Oracleでは、MERGE文を使って、結合を用いた更新や挿入を行うこともできます。以下は、employeesテーブルのsalaryをdepartmentsテーブルのlocation_idに基づいて更新する例です。

MERGE INTO employees e
USING (SELECT department_id FROM departments WHERE location_id = 1700) d
ON (e.department_id = d.department_id)
WHEN MATCHED THEN
  UPDATE SET e.salary = e.salary * 1.10;

この方法は、MERGE文を使って一度に条件に一致する行を更新するため、効率的にデータを操作することができます。

まとめ

Oracleデータベースでの結合を用いたデータ更新の方法について解説しました。基本的なUPDATE文から始まり、より複雑なサブクエリやMERGE文を使用した更新まで、様々な方法を紹介しました。これらの方法を理解し、適切に使用することで、効率的にデータを操作することができるでしょう。