Zoeken…


Invoering

De instructie DELETE wordt gebruikt om records uit een tabel te verwijderen.

Syntaxis

  1. 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 )


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow