PostgreSQLでSELECT結果をDELETEする方法|安全な削除手順を解説

PostgreSQLでSELECT結果をDELETEする方法 安全な削除手順を解説

データベースを扱う仕事をしていると、特定のデータをまとめて安全に削除したいということはありませんか?

しかし、単に DELETE 文を実行するだけでは、間違ったデータまで削除してしまうリスクがあります。そのため、まずは SELECT 文で削除対象を確認してから DELETE を行うのが基本です。

本記事では、PostgreSQLで「SELECTした結果をもとに安全にデータを削除する方法」をわかりやすく解説します。実務でのデータ操作に役立つテクニックとして、サブクエリや CTE(WITH句)、USING 句を使った削除方法を紹介していきます。

こうした実務スキルを活かしてキャリアアップを目指したい方には、データベースやバックエンドのスキルを重視した 転職サイトの活用 もおすすめです。記事の最後で、実際にどの転職サイトを活用すると効率的にエンジニア転職できるかもご紹介します。

DELETE文の基本的な解説は、こちらの記事でしています。

目次

サブクエリを使ってSELECTした結果をDELETEする

実務では「特定の条件に合致するデータだけを削除したい」というケースがほどんどです。その場合、まずSELECT で削除対象を確認してから、サブクエリを使って削除する方法が便利です。

サブクエリを使った例

DELETE FROM users
WHERE id IN (
    SELECT id FROM users WHERE status = 'inactive'
);

この例では、status'inactive' のユーザーのみを削除しています。
ポイントは以下の通りです。

  • SELECT で確認
    まず削除対象を確認することで、意図しないデータ削除を防ぎます。
  • サブクエリで DELETE
    IN の中に SELECT 文を入れることで、抽出した結果のみを安全に削除できます。

サブクエリを使うことで、複雑な条件でも完全に削除できる点が大きなメリットです。

USING句を使った削除方法

PostgreSQLでは、USING 句を使って他のテーブルや一時テーブルと組み合わせた削除が可能です。サブクエリよりも複数テーブルをJOINする感覚で安全に削除できるのが特徴です。

USING句の基本例

DELETE FROM users u
USING temp_ids t
WHERE u.id = t.id;

この例では、temp_ids という一時テーブルに登録されているIDのユーザーだけを users テーブルから削除しています。

ポイント

  • DELETE対象を特定
    USING 句で結合するテーブルや条件を明示することで、意図したデータだけを削除可能です。
  • 大量データの削除に便利
    サブクエリよりもパフォーマンスが良い場合があり、削除対象が多い場合に有効です。
  • 安全性の確保
    削除前に SELECT で対象を確認しておくことが推奨です。
SELECT u.* 
FROM users u
JOIN temp_ids t ON u.id = t.id;

WITH句を使った削除方法

PostgreSQLでは、WITH句を使って削除対象をわかりやすく指定することも可能です。

WITH句を使った削除の例

WITH target AS (
    SELECT id
    FROM users
    WHERE last_login < '2024-01-01'
)
DELETE FROM users
USING target
WHERE users.id = target.id;

この例では、2024年1月1日より前にログインしたユーザーを削除しています。

ポイント

  1. 可読性が高い
    target というCTEで削除対象を明示しているため、SQLを読む人にとって理解しやすくなります。
  2. 複雑な条件に対応可能
    JOIN や複数条件を含んだ抽出を CTE 内に書くことで、複雑な削除ロジックも整理しやすくなります。
  3. デバッグしやすい
    CTE 部分だけを SELECT で実行すれば、削除対象が正しいか事前に確認できます。

まとめ

本記事では、PostgreSQL で SELECT した結果をもとに DELETE する方法 を解説しました。

  • 基本の DELETE ... WHERE
  • サブクエリで条件を指定する方法
  • PostgreSQL 特有の USING
  • 可読性の高い WITH

これらを理解しておけば、不要データを安全に削除できるだけでなく、実務でも安心してSQLを運用できます。

データベースの知識は、バックエンドエンジニアやデータエンジニアにとって欠かせないスキルです。
もし「もっと実務でSQLを活かしたい」「今の環境より成長できる職場に挑戦したい」と感じているなら、転職サイトの活用をおすすめします。私がピックアップした転職サイト、エージェントをまとめた記事がありますので、ぜひご覧ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

沖縄出身のエンジニアです。IT業界で5年以上の経験があり、主にC#やPHPを使って開発を行ってきました。新しい技術にも興味があり、日々学びながらスキルアップを目指しています。

コメント

コメントする

CAPTCHA


目次