Recherche…
Introduction
L'instruction DELETE permet de supprimer des enregistrements d'une table.
Syntaxe
- 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 )