Aggiornamento della base di dati

9 / 100

SQL permette di aggiornare lo stato della base di dati mediante inserimenti, modifiche e cancellazioni di righe di tabelle.InserimentoE’ possibile inserire una o più righe in una tabella con il comando insert.

Consideriamo il seguente schema di relazione:

dipendente(cf, nome, cognome, stipendio)

Il seguente comando inserisce un nuovo dipendente:

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 attore

Se 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.CancellazioneE’ possibile cancellare una o più righe da una tabella con il comando delete. Ad esempio, per cancellare tutti i dipendenti posso scrivere il seguente comando:

delete from dipendente

Si 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)

Modifica

E’ possibile modificare una o più righe di una tabella con il comando update. Per incrementare del 10% lo stipendio del dipendente identificato dal codice ALSBRT69 posso scrivere come segue:

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 < 1000

Posso 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
end 

Si 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.

Translate »