PostgreSQL Supprimer des lignes de la sélection

⚡ Résumé intelligent

PostgreSQL La commande DELETE supprime une ou plusieurs lignes d'une table, et son association avec une clause WHERE cible uniquement les enregistrements qui correspondent à une condition, tandis que l'omission de WHERE efface toutes les lignes de la table.

  • 📋 syntaxe: La commande DELETE FROM table WHERE condition supprime les lignes correspondantes, et la commande RETURNING permet d'afficher les données supprimées.
  • (I.e. Une condition : Une seule clause WHERE supprime uniquement les lignes qui satisfont à un seul test.
  • ➕ Deux conditions : L'utilisation de l'opérateur AND pour combiner deux tests permet de restreindre la suppression à des lignes précises.
  • 🔗 Clause EXISTS : La fonction EXISTS supprime les lignes d'une table en fonction des enregistrements correspondants dans une autre table.
  • ️ pgAdmin : Les mêmes requêtes de suppression s'exécutent visuellement via l'éditeur de requêtes pgAdmin.
  • 🤖 Sécurité de l'IA : Les assistants IA ajoutent la clause WHERE correcte et avertissent avant la suppression complète d'une table.

PostgreSQL Supprimer des lignes de la sélection

Supprimer la requête dans PostgreSQL

Le instruction DELETE in PostgreSQL permet de supprimer un ou plusieurs enregistrements d'une table. Pour supprimer uniquement les lignes sélectionnées d'une table, PostgreSQL permet de combiner l'instruction DELETE avec la clause WHERE ; sinon, elle supprime tous les enregistrements de la table.

PostgreSQL Syntaxe de la requête de suppression

L'instruction DELETE peut être définie à l'aide de la syntaxe suivante :

[ 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] [, ...] ]

Paramètres

Les paramètres suivants sont disponibles :

  • avec requête: la clause WITH vous permet de faire référence à une ou plusieurs sous-requêtes par leur nom à l'intérieur de la requête DELETE.
  • table-name: le nom de la table dont les enregistrements doivent être supprimés.
  • alias: un substitut pour le nom de la table cible.
  • liste d'utilisation: expressions de table qui permettent d'utiliser des colonnes d'autres tables dans la clause WHERE.
  • conditions): facultatif. Ce sont les conditions qui doivent être remplies pour que les enregistrements soient supprimés. Si cette section n'est pas renseignée, tous les enregistrements de la table seront supprimés.
  • nom du curseur: le curseur à utiliser dans la condition WHERE CURRENT OF. La dernière ligne extraite par ce curseur sera supprimée.
  • expression de sortie: l'expression à traiter et à renvoyer par l'instruction DELETE après la suppression de chaque ligne.
  • nom-sortie: le nom à utiliser pour la colonne renvoyée.

Notez que, puisque l'instruction DELETE supprime la ligne entière, il n'est pas nécessaire de spécifier les noms des colonnes.

PostgreSQL Supprimer la requête avec une condition

L'instruction DELETE peut être utilisée avec une seule condition, définie par la clause WHERE. Prenons l'exemple de la table Price avec les données suivantes :

Le prix :

PostgreSQL Supprimer la requête avec une condition

Supprimons l'enregistrement avec un identifiant de 4 :

DELETE FROM Price
WHERE id = 4;

La commande ci-dessus supprime les enregistrements dont l'identifiant est 4. Vérifions si la suppression a réussi :

PostgreSQL Supprimer la requête avec une condition

La ligne avec un identifiant de 4 a été supprimée.

Supprimer la requête avec deux conditions

Le PostgreSQL L'instruction DELETE peut également accepter deux conditions. Ces deux conditions doivent être combinées à l'aide de l'opérateur AND. Nous utiliserons le tableau suivant :

Le prix :

PostgreSQL Supprimer la requête avec deux conditions

Prenons l'exemple ci-dessous :

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

Dans la commande ci-dessus, nous supprimons la ligne où l'identifiant est 3 et le prix est de 300. Nous pouvons maintenant interroger la table :

SELECT * FROM Price;

Cela renvoie les éléments suivants :

PostgreSQL Supprimer la requête avec deux conditions

L'enregistrement avec un identifiant de 3 et un prix de 300 a été supprimé.

PostgreSQL Suppression de requête utilisant la condition EXISTS

Avec EXISTE Vous pouvez rendre la suppression plus complexe en fonction de certaines conditions. Il peut parfois être nécessaire de supprimer des enregistrements d'une table en fonction des enregistrements d'une autre table.

Étant donné que la clause FROM ne permet pas de lister les enregistrements de plusieurs tables lors d'une suppression, la clause EXISTS s'avère très utile. Nous avons les deux tables suivantes :

Livre:

PostgreSQL Suppression de requête utilisant la condition EXISTS

Le prix :

PostgreSQL Suppression de requête utilisant la condition EXISTS

Nous pouvons alors exécuter la requête suivante :

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

Cette commande supprime de la table Book les lignes qui correspondent à un identifiant dans la table Price et dont le prix est inférieur à 250.

La table Livre est désormais la suivante :

PostgreSQL Suppression de requête utilisant la condition EXISTS

L'enregistrement avec un identifiant de 1 a été supprimé.

Comment supprimer une ligne dans PostgreSQL en utilisant pgAdmin

Les mêmes requêtes de suppression peuvent également être exécutées visuellement via l'interface pgAdmin, en suivant les étapes ci-dessous :

Avec une condition

Étape 1) Connectez-vous à votre compte pgAdmin. Ouvrez pgAdmin et connectez-vous à votre compte à l'aide de vos identifiants.

Étape 2) Créer une base de données de démonstration.

  1. Dans la barre de navigation de gauche, cliquez sur Bases de données.
  2. Cliquez sur Démo.

Supprimer la ligne dans PostgreSQL en utilisant pgAdmin

Étape 3) Tapez la requête ci-dessous dans l'éditeur de requête :

DELETE FROM Price
WHERE id = 4;

Étape 4) Cliquez sur le bouton Exécuter.

Supprimer la ligne dans PostgreSQL en utilisant pgAdmin

Étape 5) Vérifions si la ligne a été supprimée :

Supprimer la ligne dans PostgreSQL en utilisant pgAdmin

Avec deux conditions

Étape 1) Connectez-vous à votre compte pgAdmin.

Étape 2)

  1. Dans la barre de navigation de gauche, cliquez sur Bases de données.
  2. Cliquez sur Démo.

Supprimer la ligne dans PostgreSQL en utilisant pgAdmin

Étape 3) Tapez la requête dans l'éditeur de requêtes :

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

Étape 4) Cliquez sur le bouton Exécuter.

Supprimer la ligne dans PostgreSQL en utilisant pgAdmin

Étape 5) Vérifions si la suppression a réussi :

Supprimer la ligne dans PostgreSQL en utilisant pgAdmin

Utilisation de la condition EXISTE

Étape 1) Connectez-vous à votre compte pgAdmin.

Étape 2)

  1. Dans la barre de navigation de gauche, cliquez sur Bases de données.
  2. Cliquez sur Démo.

Supprimer une ligne en utilisant la condition EXISTS dans pgAdmin

Étape 3) Tapez la requête dans l'éditeur de requêtes :

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

Étape 4) Cliquez sur le bouton Exécuter.

Supprimer une ligne en utilisant la condition EXISTS dans pgAdmin

Étape 5) Vérifions si la suppression a réussi :

Supprimer une ligne en utilisant la condition EXISTS dans pgAdmin

Téléchargez la base de données utilisée dans ce tutoriel

FAQ

La commande TRUNCATE supprime instantanément toutes les lignes et réinitialise le stockage, mais ignore les clauses WHERE et les déclencheurs par ligne. La commande DELETE supprime les lignes sélectionnées à l'aide d'une clause WHERE, déclenche les déclencheurs de ligne et peut être annulée au sein d'une transaction.

Ajoutez une clause USING : DELETE FROM member USING denylist WHERE member.phone = denylist.phone. Cette clause joint la deuxième table et supprime les lignes correspondantes, ce qui donne le même résultat que EXISTS avec une syntaxe de jointure plus claire.

RETURNING renvoie les colonnes des lignes qui viennent d'être supprimées dans la même instruction. Saisissez DELETE FROM Price WHERE id = 4 RETURNING *, et PostgreSQL renvoie les données supprimées afin que les applications puissent consigner ou confirmer la modification.

Oui. Encadrez la suppression dans une transaction avec BEGIN, puis exécutez ROLLBACK pour l'annuler ou COMMIT pour la conserver. Tant que vous n'avez pas validé, les lignes supprimées peuvent être restaurées, ce qui vous protège contre les suppressions accidentelles.

Conservez une seule copie par groupe en utilisant la colonne cachée ctid : DELETE FROM Price a USING Price b WHERE a.ctid < b.ctid AND a.id = b.id. Cela supprime les lignes en double tout en conservant un seul enregistrement.

Exécutez d'abord le même filtre en tant que SELECT, ou ouvrez une transaction avec BEGIN et utilisez RETURNING pour examiner les lignes concernées. RevAfficher le résultat de la clause WHERE avant la validation (COMMIT) évite de supprimer plus de lignes que prévu.

Les assistants IA traduisent les règles en langage clair en une instruction DELETE avec la clause WHERE appropriée, suggèrent EXISTS ou USING pour les suppressions entre tables et signalent les instructions qui ne comportent pas de condition permettant d'effacer toute la table.

Oui. Un copilote IA examine chaque instruction DELETE, signale l'absence de clause WHERE et recommande une transaction ou un aperçu RETURNING, réduisant ainsi le risque de suppression accidentelle d'une table entière.

Résumez cet article avec :