DML e Comandi di inserimento e modifica-AD5

IL DML

Il DML Data Manipulation Language è un insieme di linguaggi che consente di leggere, inserire, modificare o eliminare i dati in un database.
Il linguaggio di manipolazione dati più utilizzato è l’SQL (Structured Query Language), che trova il suo maggiore campo di applicazione nel trattamento dei database relazionali. Altri linguaggi di tipo DML sono usati da DBMS non relazionali, come l’IMS/DL1 e l’IDMS.

I comandi DML all’inizio erano utilizzati solo all’interno di programmi scritti in altri linguaggi di programmazione, ma in seguito all’affermazione di SQL sono oggi usati anche dagli utenti finali.
I comandi DML esprimono azioni da effettuare sui dati identificate dalla parola iniziale dell’istruzione, che quasi sempre è un verbo. Nel caso di SQL, i verbi utilizzati sono SELECT per la ricerca, INSERT per l’inserimento, UPDATE per l’aggiornamento e DELETE per la cancellazione.

Le istruzioni DML dell’SQL sono state standardizzate dall’ANSI, ma molti produttori di DBMS forniscono estensioni proprietarie che garantiscono funzionalità aggiuntive.

Insert

Il comando ha la funzione di inserire i dati nelle tabelle.
Le colonne (o campi) di destinazione dei valori possono essere o meno dichiarate nel comando. Se non vengono dichiarate, è necessario passare al comando un valore per ogni colonna della tabella, rispettando rigorosamente l’ordine delle colonne stesse. Se, invece, le colonne di destinazione vengono dichiarate, è possibile indicare le sole colonne per le quali vengono passati dei valori, purché vengano inseriti comunque i valori per tutte le colonne not null (che non possono essere nulle) della tabella.
Di per sé il comando insert opera inserendo in tabella una sola riga per volta. È possibile, però, inserire più di una riga “in modo automatico” passando all’insert una serie di righe (o tuple) risultanti da un comando di select, purché tali righe siano compatibili con le colonne della tabella su cui si inseriscono i dati.
Sintassi del comando insert
Insert semplice:
INSERT INTO nome_tabella
VALUES (elenco valori, tutti, rispettando l’ordine dei campi della tabella);

Update

Il comando update ha la tripla funzione di modificare i dati delle tabelle.
Il nome di ogni campo che deve essere modificato va dichiarato dopo la parola chiave SET e deve essere seguito dal simbolo ” = ” (uguale) e dal nuovo valore che deve assumere. È possibile modificare più campi della stessa riga in un unico comando update, separandoli l’uno dall’altro con il simbolo “, ” (virgola). Il comando generico aggiorna tutte le righe della tabella. È possibile restringerne il numero applicando la parola chiave aggiuntiva WHERE, che permette di effettuare una selezione qualitativa delle righe imponendo delle condizioni sui dati presenti nelle righe prima dell’aggiornamento.

Sintassi del comando update
Update generico:
UPDATE nome_tabella
SET nome_campo1 = ‘valore1_nuovo’,
nome_campo2 = ‘valore2_nuovo’,…;
Update con condizione:
UPDATE nome_tabella
SET nome_campo1 = ‘valore1_nuovo’,
nome_campo2 = ‘valore2_nuovo’
WHERE nome_campo3 = ‘valore’;

Delete

Il comando delete ha la funzione di cancellare i dati dalle tabelle. Come il comando update anche delete può operare in modo generico cancellando tutte le righe della tabella oppure può identificare le righe da cancellare mediante la parola chiave aggiuntiva WHERE e la condizione (o le condizioni) ad essa associata.
• Delete generico:
DELETE FROM nome_tabella;
• Delete con condizione:
DELETE FROM nome_tabella
WHERE nome_campo = ‘valore’;

Comandi di modifica in SQL

• Istruzioni per
– inserimento (insert)
– cancellazione (delete)
– modifica dei valori degli attributi (update)
• Tutte le istruzioni possono operare su un insieme di tuple (set‐oriented)
• Il comando può contenere una condizione, nella quale è possibile fare accesso a tabelle esterne.

Inserimento

• Sintassi:
insert into NomeTabella [ (ListaAttributi) ]
< values (ListaDiValori) | SelectSQL>
• Usando values:
insert into Studente
values (’456878’, ’Giorgio Rossi’, ’Bologna’, ’Logistica’)
• Usando una query:
insert into Bolognesi
(select *
from Studente
where Città = ’Bologna’)

Inserimento

• L’ordine degli attributi e dei valori è significativo (notazione posizionale, il primo valore viene associato al primo attributo, e così via)
• Se la ListaAttributi viene omessa, si considerano tutti gli attributi della relazione, nell’ordine in cui compaiono nella definizione della tabella.
• Se la ListaAttributi non contiene tutti gli attributi della relazione, agli attributi rimanenti viene assegnato il valore di default (se definito, altrimenti il valore null).

Inserimento

• Usando values con ListaAttributi:
insert into Studente(Matr,Nome,Città,CDip)
values (’456878’, ’Giorgio Rossi’, ’Bologna’, ’Logistica’)
• Usando una query con ListaAttributi:
insert into Bolognesi (Matr, Nome, Città, CDip)
(selectMatr, Nome, Città, CDip
from Studente
where Città = ’Bologna’)

Cancellazioni

• Sintassi:
delete from NomeTabella [ where Condizione ]
• Cancellare lo studente con matricola 678678:
delete from Studente
where Matr = ‘678678‘
• Cancellare gli studenti che non hanno sostenuto esami:
delete from Studente
where Matr not in (select Matr
from Esame)

Cancellazioni

• L’istruzione delete cancella dalla tabella tutte le tuple che soddisfano la condizione
• Il comando può provocare delle cancellazioni in altre tabelle, se è presente un vincolo d’integrità referenziale con politica cascade
• Se si omette la clausola where, il comando delete cancella tutte le tuple
• Per cancellare tutte le tuple da STUDENTE (mantenendo lo schema della tabella):
delete from Studente
• Per cancellare completamente la tabella STUDENTE (contenuto e schema):
drop table Studente cascade

Modifiche

• Sintassi:
update NomeTabella
set Attributo = < Espressione | SelectSQL | null | default >
{, Attributo = < Espressione | SelectSQL | null | default >}
[ where Condizione ]
• Esempi:
update Esame
set Voto = 30
where Data = 1‐4‐03
update Esame
set Voto = Voto + 1
where Matr = ‘787989’

Modifiche

• Poiché il linguaggio è set‐oriented, è molto importante l’ordine dei comandi
update Impiegato
set Stipendio = Stipendio * 1.1
where Stipendio <= 30
update Impiegato
set Stipendio = Stipendio *1,15
where Stipendio >30
Se i comandi sono scritti in questo ordine, alcuni impiegati possono ottenere un aumento doppio