DELETE
DELETE — Supprimer des lignes d'une table
Synopsis
DELETE FROM [ ONLY ] table [ [ AS ] alias ]
[ USING liste_using ]
[ WHERE condition ]
[ RETURNING * | expression_sortie [ AS output_name ] [, ...] ]
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
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.
La clause RETURNING optionnelle fait que
DELETE
calcule et
renvoie le(s) valeur(s) basée(s) sur chaque ligne en cours de
suppression. Toute expression utilisant les colonnes de la table
et/ou les colonnes de toutes les tables mentionnées dans USING peut être calculée. La syntaxe de la liste
RETURNING est identique à celle de la
commande
SELECT
.
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).
-
alias
-
Un nom de substitution pour la table cible. Quand un alias
est fourni, il cache complètement le nom réel de la table.
Par exemple, avec DELETE FROM foo AS
f, le reste de l'instruction
DELETE
doit référencer la
table avec f et non plus foo.
-
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.
-
expression_sortie
-
Une expression à calculer et renvoyée par la commande
DELETE
après
chaque suppression de ligne. L'expression peut utiliser tout
nom de colonne de la
table
ou des tables listées dans
la clause USING. Indiquez * pour que toutes les colonnes soient
renvoyées.
-
nom_sortie
-
Un nom à utiliser pour une colonne renvoyée.
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).
Si la commande
DELETE
contient une clause RETURNING, le résultat
sera similaire à celui d'une instruction
SELECT
contenant les colonnes et
les valeurs définies dans la liste RETURNING, à partir de la liste des lignes
supprimées par la commande.
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;
Supprimer les tâches terminées tout en renvoyant le détail complet
des lignes supprimées :
DELETE FROM taches WHERE statut = 'DONE' RETURNING *;
Compatibilité
Cette commande est conforme au standard SQL, à l'exception des
clauses USING et RETURNING, qui sont des extensions de PostgreSQL™.