DELETE |
Efface |
---|---|
PostgreSQL |
Syntaxe
[ WITH [ RECURSIVE ] with_query [, ...] ] DELETE FROM [ ONLY ] table_name [ * ] [ [ AS ] alias ] [ USING from_item [, ...] ] [ WHERE condition | WHERE CURRENT OF cursor_name ] [ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ] |
Paramètres
Nom | Description |
---|---|
with_query | Ce paramètre permet d'indiquer une ou plusieurs sous-requêtes pouvant être référencées par nom dans la requête DELETE. |
table_name | Ce paramètre permet d'indiquer le nom (éventuellement qualifié par le schéma) de la table à partir de laquelle supprimer des lignes. Si ONLY est spécifié avant le nom de la table, les lignes correspondantes sont supprimées de la table nommée uniquement. Si ONLY n'est pas spécifié, les lignes correspondantes sont également supprimées de toutes les tables héritant de la table nommée. Facultativement, * peut être spécifié après le nom de la table pour indiquer explicitement que les tables descendantes sont incluses. |
alias | Ce paramètre permet d'indiquer un nom de substitution pour la table cible. Lorsqu'un alias est fourni, il masque complètement le nom réel de la table. Par exemple, étant donné DELETE FROM gladir AS f, le reste de l'instruction DELETE doit faire référence à cette table comme f et non gladir. |
from_item | Ce paramètre permet d'indiquer une expression de table permettant aux colonnes d'autres tables d'apparaître dans la condition WHERE. Cela utilise la même syntaxe que la clause FROM d'une instruction SELECT ; par exemple, un alias pour le nom de la table peut être spécifié. Ne répétez pas la table cible en tant que from_item sauf si vous souhaitez configurer une auto-jointure (auquel cas elle doit apparaître avec un alias dans from_item). |
condition | Ce paramètre permet d'indiquer une expression renvoyant une valeur de type booléen. Seules les lignes pour lesquelles cette expression renvoie true seront supprimées. |
cursor_name | Ce paramètre permet d'indiquer un nom du curseur à utiliser dans une condition WHERE CURRENT OF. La ligne à supprimer est la dernière extraite de ce curseur. Le curseur doit être une requête sans regroupement sur la table cible de DELETE. Notez que WHERE CURRENT OF ne peut pas être spécifié avec une condition booléenne. |
output_expression | Ce paramètre permet d'indiquer une expression à calculer et à renvoyer par la commande DELETE après la suppression de chaque ligne. L'expression peut utiliser n'importe quel nom de colonne de la table nommée par table_name ou table(s) répertoriée dans USING. Écrivez * pour retourner toutes les colonnes. |
output_name | Ce paramètre permet d'indiquer un nom à utiliser pour une colonne renvoyée. |
Retour
En cas de réussite, une commande DELETE renvoie une balise de commande dans le format :
DELETE count |
Le nombre est le nombre de lignes supprimées. Notez que le nombre peut être inférieur au nombre de lignes correspondant à la condition lorsque les suppressions ont été supprimées par un déclencheur BEFORE DELETE. Si count est égal à 0, aucune ligne n'a été supprimée par la requête (ceci 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 valeurs définies dans la liste RETURNING, calculée sur la ou les lignes supprimées par la commande.
Description
Cette instruction permet de supprimer les lignes d'un tableau.
Remarques
- L'instruction DELETE supprime les lignes satisfaisant à la clause WHERE de la table spécifiée. Si la clause WHERE est absente, l'effet est de supprimer toutes les lignes de la table. Le résultat est une table valide mais vide.
- L'instruction TRUNCATE fournit un mécanisme plus rapide pour supprimer toutes les lignes d'une table.
- Il existe deux manières de supprimer des lignes dans une table à l'aide des informations contenues dans d'autres tables de la base de données : en utilisant des sous-sélections ou en spécifiant des tables supplémentaires dans la clause USING. La technique la plus appropriée dépend des circonstances spécifiques.
- La clause facultative RETURNING oblige DELETE à calculer et à renvoyer des valeurs en fonction de chaque ligne réellement supprimée. Toute expression utilisant les colonnes de la table, et/ou les colonnes d'autres tables mentionnées dans USING, peut être calculée. La syntaxe de la liste RETURNING est identique à celle de la liste de sortie de SELECT.
- Vous devez disposer du privilège DELETE sur la table à supprimer, ainsi que du privilège SELECT pour toute table de la clause USING ou dont les valeurs sont lues dans la condition.
- Le PostgreSQL vous permet de référencer des colonnes d'autres tables dans la condition WHERE en spécifiant les autres tables dans la clause USING. Par exemple, pour supprimer tous les films produits par un producteur donné, on peut faire :
DELETE FROM films USING producers WHERE producer_id = producers.id AND producers.name = 'gladir';
Ce qui se passe essentiellement ici, c'est une jointure entre les films et les producteurs, toutes les rangées de films jointes avec succès étant marquées pour suppression. Cette syntaxe n'est pas standard. Une façon plus standard de le faire est :
DELETE FROM films
WHERE producer_id IN (SELECT id FROM producers WHERE name = 'gladir');
Dans certains cas, le style de jointure est plus facile à écrire ou plus rapide à exécuter que le style de sous-sélection.