SQL: Query di comando

16 / 100

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:

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

Query di creazione

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

Esempio 1 

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

Query di accodamento

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_campo1Tab_DEST.nome_campo2, …)
SELECT Tab_ORIG.nome_campo1Tab_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

Esempio 2 

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.

Query di eliminazione

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.

Esempio 3 

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ì).

Query di modifica

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

Esempio 4 

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.
Translate »