Documentation PostgreSQL 8.0.2 | ||||
---|---|---|---|---|
Précédent | Arrière rapide | Avance rapide | Suivant |
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 supprimera les lignes de la table spécifiée et ses sous-tables. Si vous souhaitez supprimer uniquement la table mentionnée, vous devez utiliser la clause ONLY.
Vous devez avoir le droit DELETE sur la table pour lui supprimer des lignes ainsi que le droit SELECT pour toute table dont les valeurs sont lues dans la condition.
Le nom d'une table existante (qualifié ou non du nom du schéma).
Une expression de valeur renvoyant une valeur de type boolean déterminant les lignes à supprimer.
En cas de succès, une commande DELETE renvoit une information de la forme
DELETE nombre
Le nombre correspond au nombre de lignes supprimées. Si nombre vaut 0, aucune ligne ne correspond à condition (ceci n'est pas considéré comme une erreur).
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
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, il ne peut pas gérer les jointures d'une même table.
Supprime tous les films à part les films musicaux :
DELETE FROM films WHERE genre <> 'Musique';
Efface la table films :
DELETE FROM films;
Cette commande est conforme au standard SQL, à l'exception de cette capacité à référencer d'autres dans la clause WHERE, extension de PostgreSQL.
Précédent | Sommaire | Suivant |
DECLARE | Niveau supérieur | DROP AGGREGATE |