DELETE

Nom

DELETE -- supprime les lignes d'une table

Synopsis

DELETE FROM [ ONLY ] table [ WHERE condition ]

Description

DELETE supprime les lignes qui satisfont la clause WHERE pour la table spécifiée. Si la clause WHERE est absente, toutes les lignes de la table sont supprimées. Le résultat est une table valide mais vide.

Astuce : TRUNCATE est une extension PostgreSQL fournissant un mécanisme plus rapide pour supprimer toutes les lignes d'une table.

Par défaut, DELETE supprime les lignes de la table spécifiée et de ses sous-tables. Si vous souhaitez supprimer uniquement les lignes de la table mentionnée, vous devez utiliser la clause ONLY.

Vous devez avoir le droit DELETE sur la table pour en supprimer des lignes ainsi que le droit SELECT pour toute table dont les valeurs sont lues dans la condition.

Paramètres

table

Le nom d'une table existante (qualifié ou non du nom du schéma).

condition

Une expression de valeur renvoyant une valeur de type boolean déterminant les lignes à supprimer.

Sorties

En cas de succès, une commande DELETE renvoie une information de la forme

DELETE nombre

Le nombre correspond au nombre de lignes supprimées. Si nombre vaut 0, c'est qu'aucune ligne ne correspond à condition (ceci n'est pas considéré comme une erreur).

Notes

PostgreSQL vous laisse référencer des colonnes d'autres tables dans la condition WHERE. Par exemple, pour supprimer tous les films produits par un producteur donné

DELETE FROM films
  WHERE id_producteur = producteurs.id AND producteurs.nom = 'foo';

En gros, une jointure s'établit entre films et producteurs dont toutes les lignes jointes sont supprimées. Cette syntaxe n'est pas standard. Une façon plus standard de le faire est d'utiliser une sous-selection comme :

DELETE FROM films
  WHERE id_producteur IN (SELECT id FROM producteur WHERE nom = 'foo');

Dans certains cas, la jointure est plus facile à écrire ou plus rapide à exécuter que la sous-sélection. Une objection à la jointure est qu'il n'y a pas une liste explicite des tables à utiliser, ce qui rend ce moyen plus difficile à mettre en œuvre ; de plus, cette méthode ne permet pas les auto jointures.

Exemples

Supprime tous les films à part les films musicaux :

DELETE FROM films WHERE genre <> 'Musique';

Efface toutes les lignes de la table films :

DELETE FROM films;

Compatibilité

Cette commande est conforme au standard SQL, à l'exception de la possibilité de référencer d'autres tables dans la clause WHERE, qui est une extension de PostgreSQL.