カテゴリ:

DML コマンド - 一般

DELETE

オプションの WHERE 句または追加テーブルを使用して、テーブルからデータを削除します。

重要

TRUNCATE TABLE とは異なり、このコマンドは外部ファイルのロード履歴を削除 しません。ステージングされたファイルからテーブルにロードされた行を削除する場合、ファイルを変更して再度ステージングしない限り、そのファイルからデータを再度ロードすることはできません。

構文

DELETE FROM <table_name>
            [ USING <additional_tables> ]
            [ WHERE <condition_query> ]

必須パラメーター

テーブル名

行が削除されるテーブルを指定します。

オプションのパラメーター

USING 追加テーブル

削除する行を選択するために使用する1つ以上のテーブルを指定します。ターゲットテーブルを繰り返すと、テーブルの自己結合が処理されることに注意してください。

WHERE 条件クエリ

削除する行を選択するために使用するクエリを指定します。このパラメーターを省略すると、テーブル内のすべての行が削除されます(つまり、空のテーブル)が、テーブルは残ります。

使用上の注意

  • USING 句を指定して JOIN に基づいて削除する場合、ターゲットテーブルの行が USING テーブルの複数の行と結合する可能性があります。結合された組み合わせのいずれかで DELETE 条件が満たされると、ターゲット行が削除されます。

    例えば、列 (k number, v number) のあるテーブル tab1 および tab2 がある場合:

    select * from tab1;
    
    -------+-------+
       k   |   v   |
    -------+-------+
       0   |   10  |
    -------+-------+
    
    Select * from tab2;
    
    -------+-------+
       k   |   v   |
    -------+-------+
       0   |   20  |
       0   |   30  |
    -------+-------+
    

次のクエリを実行すると、 tab1 の行は tab2 の両方の行に対して結合されます。

DELETE FROM tab1 USING tab2 WHERE tab1.k = tab2.k

少なくとも1つの結合ペアが条件を満たすため、行は削除されます。その結果、ステートメントの完了後、 tab1 は空になります。

DELETE FROM tab1
  USING tab2
  WHERE tab1.key_column = tab2.tab1_key AND tab2.number_column < 10;