Zoeken…
Invoering
De instructie DELETE wordt gebruikt om records uit een tabel te verwijderen.
Syntaxis
- VERWIJDEREN UIT TableName [WHERE voorwaarde ] [LIMIT count ]
VERWIJDER bepaalde rijen met WHERE
Hiermee worden alle rijen verwijderd die voldoen aan de WHERE
criteria.
DELETE FROM Employees
WHERE FName = 'John'
VERWIJDER alle rijen
Als u een WHERE
clausule weglaat, worden alle rijen uit een tabel verwijderd.
DELETE FROM Employees
Zie TRUNCATE- documentatie voor details over hoe TRUNCATE-prestaties beter kunnen zijn omdat het triggers en indexen en logboeken negeert om alleen de gegevens te verwijderen.
TRUNCATE-clausule
Gebruik dit om de tabel te resetten naar de toestand waarin deze is gemaakt. Hiermee worden alle rijen verwijderd en worden waarden zoals automatisch ophogen opnieuw ingesteld. Het registreert ook niet elke afzonderlijke rijverwijdering.
TRUNCATE TABLE Employees
VERWIJDER bepaalde rijen op basis van vergelijkingen met andere tabellen
Het is mogelijk om gegevens uit een tabel te DELETE
als deze overeenkomt met (of niet overeenkomt) met bepaalde gegevens in andere tabellen.
Laten we aannemen dat we gegevens uit de bron willen DELETE
zodra deze in Target zijn geladen.
DELETE FROM Source
WHERE EXISTS ( SELECT 1 -- specific value in SELECT doesn't matter
FROM Target
Where Source.ID = Target.ID )
Met de meest voorkomende RDBMS-implementaties (bijv. MySQL, Oracle, PostgresSQL, Teradata) kunnen tabellen worden samengevoegd tijdens DELETE
wat een complexere vergelijking mogelijk maakt in een compacte syntaxis.
Laten we complexiteit toevoegen aan het oorspronkelijke scenario, laten we aannemen dat Aggregate eenmaal per dag is opgebouwd uit Target en niet dezelfde ID bevat maar dezelfde datum. Laten we ook aannemen dat we gegevens alleen uit Bron willen verwijderen nadat het aggregaat voor die dag is ingevuld.
Op MySQL, Oracle en Teradata kan dit worden gedaan met behulp van:
DELETE FROM Source
WHERE Source.ID = TargetSchema.Target.ID
AND TargetSchema.Target.Date = AggregateSchema.Aggregate.Date
In PostgreSQL gebruiken:
DELETE FROM Source
USING TargetSchema.Target, AggregateSchema.Aggregate
WHERE Source.ID = TargetSchema.Target.ID
AND TargetSchema.Target.DataDate = AggregateSchema.Aggregate.AggDate
Dit resulteert hoofdzakelijk in INNER JOINS tussen Source, Target en Aggregate. De verwijdering wordt uitgevoerd op Bron wanneer dezelfde ID's bestaan in Doel EN datum aanwezig in Doel voor die ID's bestaat ook in Aggregate.
Dezelfde query kan ook worden geschreven (op MySQL, Oracle, Teradata) als:
DELETE Source
FROM Source, TargetSchema.Target, AggregateSchema.Aggregate
WHERE Source.ID = TargetSchema.Target.ID
AND TargetSchema.Target.DataDate = AggregateSchema.Aggregate.AggDate
Expliciete joins kunnen worden vermeld in Delete
op sommige RDBMS-implementaties (bijv. Oracle, MySQL) maar worden niet op alle platforms ondersteund (bijv. Teradata ondersteunt ze niet)
Vergelijkingen kunnen worden ontworpen om niet-overeenkomende scenario's te controleren in plaats van overeenkomende scenario's met alle syntaxisstijlen (let op NOT EXISTS
hieronder)
DELETE FROM Source
WHERE NOT EXISTS ( SELECT 1 -- specific value in SELECT doesn't matter
FROM Target
Where Source.ID = Target.ID )