Recherche…


Introduction

L'instruction DELETE permet de supprimer des enregistrements d'une table.

Syntaxe

  1. DELETE FROM TableName [ Condition WHERE] [ Nombre de LIMIT]

SUPPRIMER certaines lignes avec WHERE

Cela supprimera toutes les lignes correspondant aux critères WHERE .

DELETE FROM Employees
WHERE FName = 'John'

SUPPRIMER toutes les lignes

L'omission d'une clause WHERE supprime toutes les lignes d'une table.

DELETE FROM Employees

Voir la documentation TRUNCATE pour plus de détails sur la manière dont les performances TRUNCATE peuvent être améliorées, car elles ignorent les déclencheurs, les index et les journaux pour simplement supprimer les données.

Clause TRUNCATE

Utilisez cette option pour réinitialiser la table à la condition à laquelle elle a été créée. Cela supprime toutes les lignes et réinitialise des valeurs telles que l'incrémentation automatique. Il ne consigne pas non plus chaque suppression de ligne individuelle.

TRUNCATE TABLE Employees

SUPPRIMER certaines lignes en fonction de comparaisons avec d'autres tables

Il est possible de DELETE données d'une table si elles correspondent (ou ne correspondent pas) à certaines données dans d'autres tables.

Supposons que nous voulons DELETE données de la source une fois qu'elles sont chargées dans la cible.

DELETE FROM Source
WHERE  EXISTS ( SELECT 1 -- specific value in SELECT doesn't matter
               FROM Target
               Where Source.ID = Target.ID )

Les implémentations les plus courantes des SGBDR (par exemple, MySQL, Oracle, PostgresSQL, Teradata) permettent de joindre des tables lors de DELETE ce qui permet une comparaison plus complexe dans une syntaxe compacte.

En ajoutant de la complexité au scénario d'origine, supposons que Aggregate est créé à partir de Target une fois par jour et ne contient pas le même ID mais contient la même date. Supposons également que nous souhaitons supprimer des données de la source uniquement après que l’agrégat ait été rempli pour la journée.

Sur MySQL, Oracle et Teradata, cela peut être fait en utilisant:

DELETE FROM Source
WHERE  Source.ID = TargetSchema.Target.ID
       AND TargetSchema.Target.Date = AggregateSchema.Aggregate.Date

Dans PostgreSQL, utilisez:

DELETE FROM Source
USING  TargetSchema.Target, AggregateSchema.Aggregate
WHERE  Source.ID = TargetSchema.Target.ID
       AND TargetSchema.Target.DataDate = AggregateSchema.Aggregate.AggDate

Cela se traduit essentiellement par des jointures internes entre source, cible et agrégat. La suppression est effectuée sur la source lorsque les mêmes identifiants existent dans la cible ET la date présente dans la cible pour ces identifiants existe également dans l'ensemble.

La même requête peut également être écrite (sur MySQL, Oracle, Teradata) en tant que:

DELETE Source
FROM   Source, TargetSchema.Target, AggregateSchema.Aggregate
WHERE  Source.ID = TargetSchema.Target.ID
       AND TargetSchema.Target.DataDate = AggregateSchema.Aggregate.AggDate

Les jointures explicites peuvent être mentionnées dans les instructions Delete de certaines implémentations de SGBDR (par exemple, Oracle, MySQL), mais ne sont pas prises en charge sur toutes les plates-formes (par exemple, Teradata ne les prend pas en charge).

Les comparaisons peuvent être conçues pour vérifier les scénarios de non-concordance au lieu de les faire correspondre à tous les styles de syntaxe (observez NOT EXISTS ci-dessous).

DELETE FROM Source
WHERE NOT EXISTS ( SELECT 1 -- specific value in SELECT doesn't matter
               FROM Target
               Where Source.ID = Target.ID )


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow