Ricerca…
introduzione
L'istruzione DELETE viene utilizzata per eliminare i record da una tabella.
Sintassi
- DELETE FROM TableName [WHERE Condition ] [LIMIT count ]
CANCELLARE determinate righe con DOVE
Questo eliminerà tutte le righe che corrispondono ai criteri WHERE
.
DELETE FROM Employees
WHERE FName = 'John'
CANCELLARE tutte le righe
L'omissione di una clausola WHERE
cancellerà tutte le righe da una tabella.
DELETE FROM Employees
Consultare la documentazione TRUNCATE per i dettagli su come le prestazioni di TRUNCATE possono essere migliori perché ignorano i trigger, gli indici e i registri per eliminare solo i dati.
Clausola TRUNCATE
Utilizzare questo per ripristinare la tabella alla condizione in cui è stata creata. Questo elimina tutte le righe e reimposta valori come l'incremento automatico. Inoltre non registra ogni singola eliminazione di riga.
TRUNCATE TABLE Employees
CANCELLA determinate righe in base al confronto con altre tabelle
È possibile DELETE
dati da una tabella se corrispondono (o non corrispondono) determinati dati in altre tabelle.
Supponiamo di voler DELETE
dati da Source una volta caricati in Target.
DELETE FROM Source
WHERE EXISTS ( SELECT 1 -- specific value in SELECT doesn't matter
FROM Target
Where Source.ID = Target.ID )
Le implementazioni RDBMS più comuni (es. MySQL, Oracle, PostgresSQL, Teradata) consentono di unire le tabelle durante DELETE
consentendo un confronto più complesso in una sintassi compatta.
Aggiungendo complessità allo scenario originale, assumiamo che Aggregate sia stato creato da Target una volta al giorno e non contenga lo stesso ID ma contenga la stessa data. Supponiamo inoltre di voler cancellare i dati da Source solo dopo che l'aggregato è stato compilato per il giorno.
Su MySQL, Oracle e Teradata questo può essere fatto usando:
DELETE FROM Source
WHERE Source.ID = TargetSchema.Target.ID
AND TargetSchema.Target.Date = AggregateSchema.Aggregate.Date
Nell'uso di PostgreSQL:
DELETE FROM Source
USING TargetSchema.Target, AggregateSchema.Aggregate
WHERE Source.ID = TargetSchema.Target.ID
AND TargetSchema.Target.DataDate = AggregateSchema.Aggregate.AggDate
Ciò si traduce essenzialmente in INNER JOIN tra Source, Target e Aggregate. La cancellazione viene eseguita su Source quando esistono gli stessi ID nella destinazione E la data presente in Target per quegli ID esiste anche in Aggregate.
La stessa query può anche essere scritta (su MySQL, Oracle, Teradata) come:
DELETE Source
FROM Source, TargetSchema.Target, AggregateSchema.Aggregate
WHERE Source.ID = TargetSchema.Target.ID
AND TargetSchema.Target.DataDate = AggregateSchema.Aggregate.AggDate
I join espliciti possono essere menzionati nelle istruzioni Delete
su alcune implementazioni RDBMS (ad esempio Oracle, MySQL) ma non supportati su tutte le piattaforme (ad esempio Teradata non li supporta)
I confronti possono essere progettati per verificare gli scenari di mismatch invece di quelli corrispondenti con tutti gli stili di sintassi (osservare NOT EXISTS
sotto)
DELETE FROM Source
WHERE NOT EXISTS ( SELECT 1 -- specific value in SELECT doesn't matter
FROM Target
Where Source.ID = Target.ID )