InterBase クイック スタート:Part III - データの更新

提供: InterBase

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 文を入力した後は、以下を常に行うことを覚えておいてください:

  • 文を入力した後に、それを実行。
  • 作業のコミット

Image 025.jpg Employee テーブルのデータを更新する

より精密な更新を行うには、さらに制約の細かい WHERE 句を使用します。次の文を入力して、営業のうち、1992年1月1日より前に雇用された者に対してのみ、給与を昇給させてみましょう。

UPDATE Employee
SET    salary = salary + 2000
WHERE  job_code = 'Sales'
       AND hire_date < '01-JAN-1992'

上記の文に WHERE 句がなければ、更新により、Employee テーブル内のすべての社員の給与があがることになります。

Image 025.jpg UPDATES.SQL スクリプトを実行する

残りの更新を実行するには、SQL スクリプトを使用します:

  1. UPDATES.SQL スクリプトを読み込みます
  2. クエリを実行します

バックアップの時間です

UPDATES.SQL スクリプトを正常に実行できたら、データベースをバックアップするのに良いタイミングでしょう。

NULL 値の更新

時には、すべての新しい値が準備できる前に、データを更新しなければならない場合があります。 不明なデータは、その値を NULL にして示すことができます。 これは、列が NOT NULL として定義されていない(列が null 値を許容する)場合にのみ、機能します。

たとえば、1992年以前に雇用された営業社員の部署番号が変更されているが、新しい番号がまだ分からない場合、dept_noNULL として指定します。

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 句を使用するクエリです。

Image 025.jpg Department テーブルをサブクエリを使用して更新する

  1. 次のクエリを入力するところから始め、Katherine が管理する部署のマネージャ番号を検索しましょう。
    SELECT mngr_no
    FROM   Department
    WHERE  dept_no = '623'
    

    結果は 15 です。この結果は、次のクエリでダブルチェックすることができます:

    SELECT first_name, last_name
    FROM   Employee
    WHERE  emp_no = 15
    

    結果は Katherine Young です。

  2. サブクエリを伴う次の UPDATE 文を入力および実行して、Katherine Young が管理する部署番号の検索と、その部署への新しいマネージャの割り当てを、同時に行います:
    UPDATE Department
    SET    mngr_no = 107
    WHERE  dept_no = (SELECT dept_no
                      FROM   Employee
                      WHERE  full_name = 'Young, Katherine')
    

    括弧内の SELECT 文が返す行は、UPDATE 文が作業する行となります。

  3. それでは、もう一度、ステップ 1 の最初のクエリを実行して、変更を確認してみましょう。 部署 623 のマネージャが、現在、マネージャ 107になっています(15 ではなくなっている)。
  4. この変更は維持したいものではないので、次の文を入力して、Katherine Young を部署 623 のマネージャに復職させましょう。
    UPDATE Department
    SET    mngr_no = 15
    WHERE  dept_no = '623'
    

次は: