Catégories :

Commandes DML - Général

DELETE

Supprimez des données d’une table à l’aide d’une clause WHERE facultative et/ou de tables supplémentaires.

Important

Contrairement à TRUNCATE TABLE, cette commande ne supprime pas l’historique de chargement des fichiers externes. Si vous supprimez des lignes chargées dans la table à partir d’un fichier préparé, vous ne pouvez pas charger à nouveau les données de ce fichier à moins de modifier le fichier et de le préparer de nouveau.

Syntaxe

DELETE FROM <table_name>
            [ USING <additional_tables> ]
            [ WHERE <condition_query> ]

Paramètres requis

nom_table

Indique la table dont les lignes sont supprimées.

Paramètres facultatifs

USING tables_supplémentaires

Spécifie une ou plusieurs tables à utiliser pour sélectionner les lignes à supprimer. Notez que la répétition de la table cible entraînera une jointure réflexive sur la table à traiter.

WHERE requête_état

Spécifie une requête à utiliser pour sélectionner les lignes à supprimer. Si ce paramètre est omis, toutes les lignes de la table sont supprimées (c’est-à-dire que la table est vidée), mais la table en question est conservée.

Notes sur l’utilisation

  • Lors de la suppression basée sur un JOIN (en spécifiant une clause USING), il est possible qu’une ligne de la table cible soit jointe à plusieurs lignes de la ou des tables USING. Si la condition DELETE est remplie pour l’une des combinaisons jointes, la ligne cible est supprimée.

    Par exemple, les tables tab1 et tab2 données avec des colonnes (k number, v number) :

    select * from tab1;
    
    -------+-------+
       k   |   v   |
    -------+-------+
       0   |   10  |
    -------+-------+
    
    Select * from tab2;
    
    -------+-------+
       k   |   v   |
    -------+-------+
       0   |   20  |
       0   |   30  |
    -------+-------+
    

Si vous lancez la requête suivante, la ligne dans tab1 est jointe avec les deux lignes de tab2 :

DELETE FROM tab1 USING tab2 WHERE tab1.k = tab2.k

Parce qu’au moins une paire jointe satisfait à la condition, la ligne est supprimée. Par conséquent, une fois l’instruction terminée, tab1 est vide.

Exemples

DELETE FROM tab1
  USING tab2
  WHERE tab1.key_column = tab2.tab1_key AND tab2.number_column < 10;