Lezione 4 - SQL: Query di comando
Query di selezione e query di comando
Query di creazione
Query di accodamento
Query di eliminazione
Query di modifica
Differenza tra query di selezione e query di comando: osservazione finale
Query di selezione e query di comando
Una query è un'interrogazione, vale a dire una richiesta di reperire dati in un DB, aggregati tra loro per mezzo di
criteri che possono essere stabiliti. Tutto quanto visto finora è stato realizzato mediante interventi di questo tipo, che, cioè,
mostrano i dati con diverse possibili aggregazioni, ma non ne modificano l'origine. Le tabelle d'origine delle
informazioni non sono mai modificate.
SQL permette di realizzare anche interventi più... invasivi. E' possibile modificare i dati in modo sistematico attraverso
query opportune. Gli interventi possibili sono:
- Creazione: crea una tabella nuova, a partire da una esistente
- Accodamento: inserisce record in coda a una tabella esistente
- Eliminazione: cancella informazioni da tabelle
- Modifica: varia informazioni secondo criteri prestabiliti
In generale quando è necessario ricorrere a una query di comando per apportare una modifica ai dati di un DB?
Questo avviene quando le variazioni sono sistematiche, o comunque tutte dello stesso tipo, e vengono applicate a dati
individuabili secondo criteri precisi. Vediamo alcuni esempi.
- Vanno cancellati dalla tabella degli studenti iscrtitti a una scuola tutti i nomi di coloro che hanno frequentato
il quinto anno e sono stati promossi
- Vanno accodati ai dati di una tabella esistente, o inseriti in una tabella nuova, tutti gli studenti diplomati con valutazione
superiore a 80/100
- In seguito a una variazione della numerazione telefonica fissa, tutti i numeri con un dato prefisso acquisiscono una cifra
fissata (es. 8) all'inizio del numero
Situazione: si vuole creare una nuova tabella che contenga l'elenco di tutti i dati degli studenti che hanno una caratteristica
comune, ad es. abitano a Crema. Questo può essere fatto, anche limitando il numero dei campi che verranno inseriti.
Inoltre è possibile inserire la nuova tabella in un DB diverso da quello corrente.
Se la tabella destinazione esite già, il suo precedente contenuto viene interamente cancellato.
SELECTnome_tab1.nome_campo1[, nometab1.nomecampo2,...] INTO nome_tab2
FROM nometab1 WHERE (condizione)
crea la tabella chiamata nome_tab2, inserendo i dati specificati da SELECT, in base alla condizione posta
Istruzione SQL
SELECT STUDENTI.ID_S, STUDENTI.Cognome, STUDENTI.Nome INTO StudentiCrema
FROM STUDENTI
WHERE (STUDENTI.Città = ' Crema' )
StudentiCrema è una tabella in più, creata con l'esecuzione del codice SQL sopra indicato
Situazione: Dopo il conseguimento dei diplomi al termine del quinto anno, si richiede l'accodamento dei dati
degli studenti diplomati alla tabella DIPLOMATI (accodamento significa inserimento in coda ai record esistenti)
Nel trasferimento dei dati è possibile utilizzare tutti i campi o individuarne solo alcuni.
Infatti la tabella origine e quella destinazione non hanno necessariamente la stessa struttura
INSERT INTO Tab_DEST (Tab_DEST.nome_campo1, Tab_DEST.nome_campo2, ...)
SELECT Tab_ORIG.nome_campo1, Tab_ORIG.nome_campo2, ...
FROM Tab_ORIG
[WHERE (condizione)]
Tab_ORIG = tabella origine, di provenienza dei dati
Tab_DEST = tabella destinazione, dove vengono accodati i dati
Aggiunge alla tabella destinazione i dati tratti dalla tabella origine. I campi interessati devono
essere corrispondenti nelle due tabelle: sono quelli specificati nella prima riga (per la tab. destinazione)
e nella seconda (per la tab. origine).
Nella tabella destinazione vengono aggiunti tanti record quanti sono quelli selezionati dalla tabella origine
in base alla condizione posta. Se non c'è condizione si accodano TUTTI i record d'origine
Istruzione SQL
INSERT INTO DIPLOMATI (Cognome, Nome, Indirizzo, Città, Stato, CAP, Data_Nascita)
SELECT STUDENTI.Cognome, STUDENTI.Nome, STUDENTI.Indirizzo, STUDENTI.Città, STUDENTI.Stato,
STUDENTI.CAP, STUDENTI.Data_Nascita
FROM STUDENTI
WHERE ((STUDENTI.Classe = 5) AND (STUDENTI.Promosso = Sì));
Aggiunge alla tabella DIPLOMATI i record tratti dalla tabella STUDENTI per cui valgono le due
condizioni indicate (Classe = 5 e Promosso = Sì).
I campi interessati non sono tutti
quelli della tabella STUDENTI, ma Cognome, Nome, Indirizzo, Città, Stato, CAP, Data_Nascita (quelli
indicati nell'istruzione SQL), vale a dire i campi di interesse per la tabella DIPLOMATI.
Situazione: aggiornata la tabella STUDENTI con le promozioni e accodati i dati dei diplomati
alla tabella DIPLOMATI, si vogliono cancellare i record degli studenti promossi al termine
del quinto anno.
E' possibile selezionare i record da eliminare da una tabella in base a uno o più criteri.
DELETE *
FROM Nome_Tab
[WHERE (condizione)]
Dalla tabella di nome Nome_Tab vengono cancellati tutti i record per cui vale la condizione posta.
Se non c'è condizione si eliminano TUTTI i record.
Istruzione SQL
DELETE *
FROM STUDENTI
WHERE ((STUDENTI.Classe = 5) AND (STUDENTI.Promosso = Sì));
cancella dalla tabella STUDENTI i record degli alunni diplomati, cioè quelli per cui valgono le due
condizioni indicate (Classe = 5 e Promosso = Sì).
Situazione: si richiede l'aggiornamento di informazioni in una tabella in base a criteri stabiliti.
E' necessario che siano individuabili tramite criteri precisi sia le modifiche da fare, sia i record
sui quali effettuare le variazioni.
Per esempio è un'operazione da una query di modifica la
variazione di indirizzo e numero di telefono di una persona che ha cambiato residenza.
E' invece un'operazione corretta cambiare con una query di modifica di tutti i prefissi dei
UPDATEnome_tabella SET nome_campo = (espressione)
[WHERE (condizione)]
modifica, nella tabella chiamata nome_tabella, tutti i record per cui vale la condizione posta.
assegnando al campo nome_campo il valore dell'espressione indicata
Istruzione SQL
UPDATE STUDENTI
SET STUDENTI.Classe = STUDENTI.Classe + 1
WHERE ((STUDENTI.Promosso = Sì) AND (STUDENTI.Classe < 5))
Aggiorna il campo Classe di
tutti gli studenti promossi (record con campo Promosso = Sì)
e
che non frequentano il quinto anno (record con campo Classe < 5)
Sono individuabili in base a criteri precisi:
- quali sono i record da modificare: tutti quelli che rispondono alle condizioni indicate
- quali sono le variazioni sui dati: incremento del campo Classe
Differenza tra query di selezione e query di comando: osservazione finale
E' essenziale non confondere significato e scopo delle diverse categorie di query:
- Query di selezione: realizza l'aggregazione di dati presi da una o più tabelle, selezionati
sulla base di criteri determinati. Il risultato di questa operazione è un RecordSet.
Un Set di Record, o RecordSet, è una sorta di tabella virtuale che non varia i dati d'origine,
ma si limita a MOSTRARLI diversamente
- Query di comando: permette di variare i dati in modo irreversibile: dopo l'intervento di
modifica non è più possibile annullare l'operazione. Non corrisponde ad alcun RecordSet e non
visualizza le variazioni effettuate. Per vedere i dati modificati, è necessario aprire una query di selezione.
Home
Lezione 3