PostgreSQL 選択した行を削除します

⚡ スマートサマリー

PostgreSQL DELETE文はテーブルから1つ以上の行を削除します。WHERE句と組み合わせると、条件に一致するレコードのみが対象となり、WHERE句を省略するとテーブル内のすべての行が削除されます。

  • ???? 構文: DELETE FROM table WHERE条件は一致する行を削除し、RETURNINGは削除されたデータを表示できます。
  • 🎯 条件が1つあります。 単一のWHERE句は、1つの条件を満たす行のみを削除します。
  • 2つの条件: 2つのテストをANDで結合することで、削除対象を特定の行に絞り込むことができます。
  • 🔗 EXISTS 条項: EXISTS関数は、あるテーブルのレコードと一致するレコードに基づいて、別のテーブルの行を削除します。
  • 甘いもの<XNUMXxXNUMX><XNUMXxXNUMX><XNUMXxAXNUMX><XNUMXxAXNUMX>️️ pgAdmin: 同じ削除クエリは、pgAdminのクエリエディタを通して視覚的に実行できます。
  • 🤖 AIの安全性: AIアシスタントは適切なWHERE句を追加し、テーブル全体を削除する前に警告を発します。

PostgreSQL 選択範囲から行を削除

クエリを削除 PostgreSQL

その DELETE文 in PostgreSQL テーブルから 1 つ以上のレコードを削除するために使用します。テーブルから選択した行のみを削除するには、 PostgreSQL DELETE文とWHERE句を組み合わせることができます。そうでない場合は、テーブル内のすべてのレコードが削除されます。

PostgreSQL 削除クエリ構文

DELETE文は、以下の構文を使用して定義できます。

[ WITH [ RECURSIVE ] with-query [, ...] ]
DELETE FROM [ ONLY ] table-name [ * ] [ [ AS ] alias ]
    [ USING using-list ]
    [ WHERE condition(s) | WHERE CURRENT OF cursor-name]
    [ RETURNING * | output-expression [ [ AS ] output-name] [, ...] ]

技術パラメータ

以下のパラメータが利用可能です。

  • クエリ付きWITH句を使用すると、DELETEクエリ内で1つ以上のサブクエリを名前で参照できます。
  • テーブル名: レコードを削除するテーブルの名前。
  • alias: 対象テーブル名の代わりとなるもの。
  • 使用リスト他のテーブルの列をWHERE句で使用できるようにするテーブル式。
  • 条件):オプション。レコードを削除するために満たさなければならない条件です。このセクションが指定されていない場合、テーブル名に一致するすべてのレコードが削除されます。
  • カーソル名: WHERE CURRENT OF 条件で使用するカーソル。このカーソルによって最後に取得された行は削除されます。
  • 出力式: 各行が削除された後に、DELETE ステートメントによって処理され返される式。
  • 出力名: 返された列に使用される名前。

DELETE文は行全体を削除するため、列名を指定する必要はありません。

PostgreSQL 1 つの条件でクエリを削除する

DELETE文は、WHERE句で設定した単一の条件で使用できます。次のデータを持つPriceテーブルを考えてみましょう。

価格:

PostgreSQL 1 つの条件でクエリを削除する

ID が 4 のレコードを削除しましょう。

DELETE FROM Price
WHERE id = 4;

上記のコマンドは、IDが4のレコードを削除します。削除が成功したかどうかを確認してみましょう。

PostgreSQL 1 つの条件でクエリを削除する

ID が 4 の行が削除されました。

XNUMX つの条件を含むクエリの削除

その PostgreSQL DELETE文は2つの条件を取ることもできます。2つの条件はAND演算子で結合する必要があります。以下の表を使用します。

価格:

PostgreSQL XNUMX つの条件を含むクエリの削除

以下の例を考えてみましょう。

DELETE FROM Price
WHERE id = 3
AND price = 300;

上記のコマンドでは、IDが3で価格が300の行を削除しています。これでテーブルをクエリできます。

SELECT * FROM Price;

これにより、次が返されます。

PostgreSQL XNUMX つの条件を含むクエリの削除

ID 3、価格 300 のレコードが削除されました。

PostgreSQL EXISTS条件を使用したクエリの削除

存在する 条件によっては、削除処理をより複雑にすることができます。場合によっては、あるテーブルのレコードに基づいて、別のテーブルのレコードを削除する必要が生じることもあります。

FROM句では削除時に複数のテーブルからレコードを列挙できないため、EXISTS句が非常に役立ちます。ここでは、次の2つのテーブルを使用します。

本:

PostgreSQL EXISTS条件を使用したクエリの削除

価格:

PostgreSQL EXISTS条件を使用したクエリの削除

次に、次のクエリを実行します。

DELETE FROM Book
WHERE EXISTS
  (SELECT 1
    FROM Price
    WHERE Price.id = Book.id
    AND price < 250 );

このコマンドは、Book テーブルから、Price テーブルに一致する ID を持ち、価格が 250 未満の行を削除します。

Book テーブルは次のようになります。

PostgreSQL EXISTS条件を使用したクエリの削除

ID 1 のレコードが削除されました。

行を削除する方法 PostgreSQL pgAdminを使用する

以下の手順に従って、pgAdminインターフェースから同じ削除クエリを視覚的に実行することもできます。

ただし条件が一つある

ステップ1) pgAdminアカウントにログインしてください。pgAdminを開き、認証情報を使用してアカウントにログインしてください。

ステップ2) デモデータベースを作成します。

  1. 左側のナビゲーション バーで、[データベース] をクリックします。
  2. 「デモ」をクリックします。

行を削除 PostgreSQL pgAdminを使用する

ステップ3) クエリ エディターに次のクエリを入力します。

DELETE FROM Price
WHERE id = 4;

ステップ4) 「実行」ボタンをクリックします。

行を削除 PostgreSQL pgAdminを使用する

ステップ5) 行が削除されたかどうか確認してみましょう。

行を削除 PostgreSQL pgAdminを使用する

2つの条件付き

ステップ1) pgAdmin アカウントにログインします。

ステップ2)

  1. 左側のナビゲーション バーで、[データベース] をクリックします。
  2. 「デモ」をクリックします。

行を削除 PostgreSQL pgAdminを使用する

ステップ3) クエリ エディターにクエリを入力します。

DELETE FROM Price
WHERE id = 3
AND price = 300;

ステップ4) 「実行」ボタンをクリックします。

行を削除 PostgreSQL pgAdminを使用する

ステップ5) 削除が成功したかどうかを確認してみましょう。

行を削除 PostgreSQL pgAdminを使用する

EXISTS 条件の使用

ステップ1) pgAdmin アカウントにログインします。

ステップ2)

  1. 左側のナビゲーション バーで、[データベース] をクリックします。
  2. 「デモ」をクリックします。

pgAdminでEXISTS条件を使用して行を削除する

ステップ3) クエリ エディターにクエリを入力します。

DELETE FROM Book
WHERE EXISTS
  (SELECT 1
    FROM Price
    WHERE Price.id = Book.id
    AND price < 250 );

ステップ4) 「実行」ボタンをクリックします。

pgAdminでEXISTS条件を使用して行を削除する

ステップ5) 削除が成功したかどうかを確認してみましょう。

pgAdminでEXISTS条件を使用して行を削除する

このチュートリアルで使用するデータベースをダウンロードする

よくあるご質問

TRUNCATEはすべての行を即座に削除し、ストレージをリセットしますが、WHERE句と行ごとのトリガーは無視します。DELETEはWHERE句を使用して選択した行を削除し、行トリガーを起動し、トランザクション内でロールバックできます。

USING句を追加します。例:DELETE FROM member USING denylist WHERE member.phone = denylist.phone。これにより、2番目のテーブルが結合され、一致する行が削除されます。EXISTS句と同じ結果が得られますが、結合スタイルの構文がより明確です。

RETURNING は、同じステートメントで削除された行の列をエコーし​​ます。DELETE FROM Price WHERE id = 4 RETURNING * と記述し、 PostgreSQL 削除されたデータを返すので、アプリケーションは変更をログに記録したり、確認したりできます。

はい。DELETE文をBEGIN句でトランザクションにラップし、その後ROLLBACKを実行して取り消し、COMMITを実行して保持します。コミットするまでは削除された行を復元できるため、誤って削除してしまうことを防ぐことができます。

非表示の ctid 列を使用して、グループごとに 1 つのコピーを保持します。例: DELETE FROM Price a USING Price b WHERE a.ctid < b.ctid AND a.id = b.id。これにより、重複する行が削除され、単一のレコードが保持されます。

まず同じフィルタをSELECT文として実行するか、BEGINでトランザクションを開始し、RETURNINGを使用して影響を受ける行を検査してください。 RevCOMMITの前にWHERE句の結果を確認することで、意図したよりも多くの行を削除することを防ぐことができます。

AIアシスタントは、平易な英語のルールを正しいWHERE句を含むDELETE文に変換し、テーブル間削除にはEXISTSまたはUSINGを提案し、テーブル全体をクリアする条件が欠落しているステートメントを警告します。

はい。AIコパイロットが各DELETE文をレビューし、WHERE句が存在しない場合は警告を発し、トランザクションまたはRETURNINGプレビューを推奨することで、誤ってテーブル全体を削除してしまうリスクを軽減します。