SQL permette di aggiornare lo stato della base di dati mediante inserimenti, modifiche e cancellazioni di righe di tabelle.
insert into dipendente(cf, nome, cognome, stipendio) values ('ALSBRT69', 'Alessio', 'Bertallot', '1000')Il seguente comando inserisce come dipendenti tutti gli attori presenti nella tabella attore:
insert into dipendente(cf, nome, cognome) select cf, nome, cognome from attoreSe in un inserimento non vengono specificati tutti gli attributi della tabella, gli attributi non specificati assumono il valore di default, se definito, oppure il valore nullo.
delete from dipendenteSi noti che questo comando cancella il contenuto della tabella ma, a differenza del comando drop, non rimuove la tabella dallo schema della base di dati. Per cancellare solo alcune righe, posso aggiungere la clausola where che segue la sintassi già vista per le interrogazioni di selezione di dati. Ad esempio, per rimuovere i dipendenti disoccoupati, cioè che non partecipano alla tabella lavoro, posso scrivere:
delete from dipendente where cf not in (select dipendente from lavoro)
update dipendente set stipendio = stipendio * 1.1 where cf = 'ALSBRT69'Posso incrementare lo stipendio di tutti gli impiegati con stipendio inferiore a 1000:
update dipendente set stipendio = 1000 where stipendio < 1000Posso modificare più attributi per ogni tupla inserendo la lista di assegnamenti, separati da uan virgola, nella clausola set. Ogni attributo può essere assegnato al valore di una espressione, al valore di una interrogazione, al valore di default (scrivendo default) e al valore nullo (scrivendo null). Ad esempio, il seguente comando assegna lo stipendio medio a tutti i dipendenti (si noti che in assenza della clausola where tutte le righe della tabella vengono modificate):
update dipendente set stipendio = (select avg(stipendio) from dipendente)Supponiamo infine di voler incrementare del 20% gli stipendi inferiori a 1000, del 10% quelli tra 1000 e 2000, e lasciare invariati gli altri. Posso in questo caso usare una interrogazione che fa uso del costrutto case:
update dipendente set stipendio = case when (stipendio < 1000) then stipendio = stipendio * 1.2 when ((stipendio >= 1000) and (stipendio <= 2000)) then stipendio = stipendio * 1.1 else stipendio endSi noti che, grazie al comando case, ogni riga viene incrementata una sola volta. Si avrebbe un effetto diverso usando i seguenti due comandi in cascata:
update dipendente set stipendio = stipendio * 1.2 where stipendio < 1000 update dipendente set stipendio = stipendio * 1.1 where (stipendio >= 1000) and (stipendio <= 2000)Infatti, uno stipendio di 900 verrebbe incrementato due volte.