InterBase クイック スタート:Part III - データの削除

提供: InterBase
移動先: 案内検索

InterBase クイック スタート:Part III - データベースの中身の設定 へ戻る

テーブルからデータの行を 1 つまたは複数削除するには、DELETE 文を使用します。 シンプルな DELETE は、次の構文になります:

DELETE FROM Table
WHERE  CONDITION

UPDATE のときと同様、WHERE 句に、削除する行を決定する検索条件を指定します。 検索条件は、サブクエリを使用して、組み合わせることができます。

メモ: DELETE 文には、WHERE 句は必須ではありません。 しかし、WHERE 句を含めない場合、テーブルの行 すべてを削除することになります。

Image 025.jpg Sales テーブルから行を削除する

  1. 次の SELECT 文を入力して、1992 年よりも前の販売記録を確認します:
    SELECT *
    FROM   Sales
    WHERE  order_date < '31-DEC-1991'
    

    得られる結果は、エントリを 1 つだけ含んでいるはずです。

  2. この時点までの作業をコミットしましょう。
  3. 次の DELETE 文を入力します:
    DELETE FROM Sales
    WHERE  order_date < '31-DEC-1991'
    

    DELETE 文では、列指定がいらない点に注意してください。 この文は、指定した行のすべての列を削除するからです。

  4. ステップ 1 から、SELECT クエリを入力します。空の(行がない)結果を受け取るはずです。

Image 025.jpg ロールバックを使用して変更を元に戻す

最終的にはこのデータを削除するべきではなかったと気付いたとします。 幸いなことに、DELETE 文を実行する前に、作業をコミットしていましたので、最後のコミットの後に実行した変更はロールバック(元に戻す)ことができます。

  1. ロールバックを実行します。
  2. 再びステップ 1 から、SELECT クエリを入力します。 データを削除する前の同じ(1 行の)結果が確認できるはずです。

バックアップの時間です

このセクションを正常に終了できたら、データベースのバックアップを行う良いタイミングでしょう。

より精密な削除

削除操作は、検索条件を組み合わせることにより、さらに制御することができます。 たとえば、次の文は、1992年1月1日より前に雇用された、営業部の社員全員のレコードを削除します:

DELETE FROM Employee
WHERE  job_code = 'Sales'
       AND hire_date = '01-Jan-1992'

この文の実行を試すことはできますがエラーとなります。これは、Employee テーブルを参照する外部キー列が Employee_project テーブルにあるためです。これらの行を削除しようとすると、Employee テーブルに一致する値がない値を Employee_project テーブルに残すことになり、次のような外部キーの制約に違反することになります:「プロジェクトを持つ社員はいずれも、Employee テーブルにエントリがなければならない」。

データの削除にはまた、更新のときと同様、サブクエリを使用することができます。 次の文は、Katherine Young と同じ部署にいる社員について、Employee テーブルからすべての行を削除します。

DELETE FROM Employee
WHERE  dept_no = (SELECT dept_no
                  FROM   Employee
                  WHERE  full_name = 'Young, Katherine')

ここでも、他のテーブルへの外部キー制約違反になってしまうので、実際にはこの文を実行することはできません。

次は: