InterBase クイック スタート:Part III - データの更新
InterBase クイック スタート:Part III - データベースの中身の設定 へ戻る
依存のテーブルにある、1 つまたは複数のデータ行の値を変更するには、UPDATE
文を使用します。
目次
UPDATE の使用
シンプルな更新の場合、構文は次のようになります:
UPDATE table
SET column = value
WHERE CONDITION
UPDATE
文は、SET
句で指定された列に対して、値を更新します。SET
句に列挙されなかった列は、変更されません。複数の列を更新するには、各列の割り当てをカンマで区切って、SET
句内に列挙します。 WHERE
句は、どの行が更新されるかを決定します。 WHERE
句がなかった場合、すべての行が更新されます。
たとえば、次の文は、営業の給与を 2000
上げるもので、Employee
テーブルにおいて、job_code
列の値が Sales
である行の、salary 列を更新します(この文は実行しないでください)。
UPDATE Employee
SET salary = salary + 2000
WHERE job_code = 'Sales'
実行およびコミットする
このチュートリアルの残りの部分では、数多くの文が用意されています(これらの文の一部は、DML 文です)。DML 文を入力した後は、以下を常に行うことを覚えておいてください:
- 文を入力した後に、それを実行。
- 作業のコミット。
Employee テーブルのデータを更新する
より精密な更新を行うには、さらに制約の細かい WHERE
句を使用します。次の文を入力して、営業のうち、1992年1月1日より前に雇用された者に対してのみ、給与を昇給させてみましょう。
UPDATE Employee
SET salary = salary + 2000
WHERE job_code = 'Sales'
AND hire_date < '01-JAN-1992'
上記の文に WHERE
句がなければ、更新により、Employee
テーブル内のすべての社員の給与があがることになります。
UPDATES.SQL スクリプトを実行する
残りの更新を実行するには、SQL スクリプトを使用します:
バックアップの時間です
UPDATES.SQL
スクリプトを正常に実行できたら、データベースをバックアップするのに良いタイミングでしょう。
NULL 値の更新
時には、すべての新しい値が準備できる前に、データを更新しなければならない場合があります。 不明なデータは、その値を NULL
にして示すことができます。 これは、列が NOT NULL
として定義されていない(列が null 値を許容する)場合にのみ、機能します。
たとえば、1992年以前に雇用された営業社員の部署番号が変更されているが、新しい番号がまだ分からない場合、dept_no
を NULL
として指定します。
UPDATE Employee
SET salary = salary + 2000,
dept_no = NULL
WHERE job_code = 'Sales'
AND hire_date < '01-Jan-1992'
サブクエリを利用した更新
WHERE
句の検索条件は、サブクエリにすることができます。 たとえば、Katherine Young
が現在管理している部署のマネージャを変更したいとしましょう。 これを行う 1 つの方法は、まず Katherine Young
の部署番号を判別します:
SELECT dept_no
FROM Employee
WHERE full_name = 'Young, Katherine'
このクエリは、値 632
を返します。その結果を、UPDATE
における検索条件として使用して、部署のマネージャを変更することができます:
UPDATE Department
SET mngr_no = 107
WHERE dept_no = '623'
この更新をもっと効率的に行う方法として、サブクエリを使った上記の 2 つの文をまとめる方法が考えられます。 サブクエリとは、WHERE
句内で SELECT
句を使用するクエリです。
Department テーブルをサブクエリを使用して更新する
- 次のクエリを入力するところから始め、Katherine が管理する部署のマネージャ番号を検索しましょう。
SELECT mngr_no FROM Department WHERE dept_no = '623'
結果は
15
です。この結果は、次のクエリでダブルチェックすることができます:SELECT first_name, last_name FROM Employee WHERE emp_no = 15
結果は
Katherine Young
です。 - サブクエリを伴う次の
UPDATE
文を入力および実行して、Katherine Young
が管理する部署番号の検索と、その部署への新しいマネージャの割り当てを、同時に行います:UPDATE Department SET mngr_no = 107 WHERE dept_no = (SELECT dept_no FROM Employee WHERE full_name = 'Young, Katherine')
括弧内の
SELECT
文が返す行は、UPDATE
文が作業する行となります。 - それでは、もう一度、ステップ 1 の最初のクエリを実行して、変更を確認してみましょう。 部署
623
のマネージャが、現在、マネージャ107
になっています(15
ではなくなっている)。 - この変更は維持したいものではないので、次の文を入力して、
Katherine Young
を部署623
のマネージャに復職させましょう。UPDATE Department SET mngr_no = 15 WHERE dept_no = '623'