PostgreSQLLa base de données la plus sophistiquée au monde.

DELETE

DELETE — Supprimer des lignes d'une table

Synopsis

DELETE FROM [ ONLY ] table
    [ USING liste_using ]
    [ WHERE condition ]

Description

DELETE supprime de la table spécifiée les lignes qui satisfont la clause WHERE. 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]

Astuce

TRUNCATE est une extension PostgreSQL™ qui fournit un mécanisme plus rapide de suppression de l'ensemble des lignes d'une table.

Par défaut, DELETE supprime les lignes de la table spécifiée et de ses tables filles. La clause ONLY est utilisée pour ne supprimer que les lignes de la table mentionnée.

Il existe deux façons de supprimer des lignes d'une table en utilisant les informations d'autres tables de la base de données : les sous-sélections ou la spécification de tables supplémentaires dans la clause USING. La technique la plus appropriée dépend des circonstances.

Il est nécessaire de posséder le droit DELETE sur la table pour en supprimer des lignes, et le droit SELECT sur toute table de la clause USING et sur toute table dont les valeurs sont lues dans la condition.

Paramètres

ONLY

Si cette option est spécifiée, les lignes ne sont supprimées que dans la table nommée. Dans le cas contraire, toutes les tables qui héritent de la table nommée sont considérées.

table

Le nom de la table (éventuellement qualifié du nom du schéma).

liste_using

Une liste d'expressions de table, qui permet de faire apparaître des colonnes d'autres tables dans la condition WHERE. C'est semblable à la liste des tables utilisées dans la clause Clause FROM d'une instruction SELECT ; un alias du nom d'une table peut ainsi être utilisé. La table cible ne doit pas être précisée dans liste_using, sauf si une auto-jointure est envisagée.

condition

Une expression retournant une valeur de type boolean qui permet de déterminer 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 (ce qui n'est pas considéré comme une erreur).

Notes

PostgreSQL™ autorise les références à des colonnes d'autres tables dans la condition WHERE par la spécification des autres tables dans la clause USING. Par exemple, pour supprimer tous les films produits par un producteur donné

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

Pour l'essentiel, une jointure est établie entre films et producteurs avec toutes les lignes jointes marquées pour suppression. Cette syntaxe n'est pas standard. Une façon plus standard de procéder consiste à utiliser une sous-selection :

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.

Exemples

Supprimer tous les films qui ne sont pas des films musicaux :

DELETE FROM films WHERE genre <> 'Comédie musicale';

Effacer toutes les lignes de la table films :

DELETE FROM films;

Compatibilité

Cette commande est conforme au standard SQL, à l'exception de la clause USING et de la possibilité de référencer d'autres tables dans la clause WHERE, qui sont des extensions de PostgreSQL™.