Database relazionali: primi cenni di SQL
La ragione primaria per cui si introduce un sistema informativo è quella di poter effettuare comodamente ricerche, ovvero “interrogare i dati” come si dice.
Delle operazioni che si possono compiere sui dati parliamo anche nell’articolo sui DBMS.
SQL: il linguaggio dei dati
Il linguaggio utilizzato maggiormente per effettuare questa operazione è detto SQL (Structured Query Language) e permette di operare direttamente sui dati contenuti nelle tabelle di un database relazionale.
Esistono numerosi “dialetti” dell’SQL: si tratta di SQL con sintassi leggermente diverse, ad esempio a seconda del vendor (Microsoft, Oracle ecc.).
Le stringhe in linguaggio SQL sono dette query (dal latino quaero: chiedere per sapere).
Esempi di comandi SQL (DML) senza modifica di dati
Con alcuni esempi vengono qui di seguito introdotti i comandi DML (Data Manipulation Language) fondamentali.
Gli esempi utilizzeranno la seguente tabella di partenza, denominata “studente”, dove il campo matricola è chiave primaria:
MATRICOLA | COGNOME | NOME | CORSO |
12001 | Rossi | Mario | A |
12002 | Bianchi | Paolo | B |
12003 | Verdi | Giovanna | B |
12004 | Neri | Maria | A |
ESEMPIO 1. Si vuole un elenco dei cognomi contenuti nella tabella, ordinato alfabeticamente (dalla A alla Z); la query
select cognome from studente order by cognome
dà come risultato
COGNOME |
Bianchi |
Neri |
Rossi |
Verdi |
Si noti che il comando select non modifica alcuna riga della tabella, ma mostra solo (in parte o tutto) il contenuto della tabella stessa. Difatti dopo l’esecuzione della query la tabella rimane quella di partenza:
MATRICOLA | COGNOME | NOME | CORSO |
12001 | Rossi | Mario | A |
12002 | Bianchi | Paolo | B |
12003 | Verdi | Giovanna | B |
12004 | Neri | Maria | A |
ESEMPIO 2. Ora vogliamo visualizzare l’elenco delle matricole del corso A: la query
select matricola from studente where corso=’A’
dà come risultato (in visualizzazione: anche qui siccome c’è select non viene modificata la tabella di partenza)
MATRICOLA |
12001 |
12004 |
ESEMPIO 3. Vogliamo ora invece visualizzare l’elenco di matricole del corso A, con cognome e nome: la query
select matricola,cognome,nome from studente where corso=’A’
dà come risultato (in visualizzazione: anche qui siccome c’è select non viene modificata la tabella di partenza)
MATRICOLA | COGNOME | NOME |
12001 | Rossi | Mario |
12004 | Neri | Maria |
ESEMPIO 4. Ora invece cerchiamo numero di matricola, cognome e nome degli studenti che frequentano il corso A e si chiamano di nome Mario: la query
select matricola,cognome,nome from studente where corso=’A’ and nome=’Mario’
dà come risultato
MATRICOLA | COGNOME | NOME |
12001 | Rossi | Mario |
ESEMPIO 5. Vogliamo ora una lista di matricole, cognomi e nomi degli studenti il cui nome inizia con la lettera M: la query
select cognome,nome from studente where cognome like ‘M%’
dà come risultato
MATRICOLA | COGNOME | NOME |
12001 | Rossi | Mario |
12004 | Neri | Maria |
NOTA: si ribadisce che gli esempi visti finora (da 1 a 5) utilizzano l’istruzione select, dunque non effettuano modifiche sui dati. Gli esempi successivi (da 6 a 8) invece modificano i dati, come si vedrà nel seguito.
Esempi di comandi SQL (DML) con modifica di dati
ESEMPIO 6. Vogliamo inserire un record (una riga) nella tabella: la query
insert into studente values (’12005’,’Russo’,’Nicola’,’A’)
inserisce nella tabella una nuova riga, così ora la tabella è
MATRICOLA | COGNOME | NOME | CORSO |
12001 | Rossi | Mario | A |
12002 | Bianchi | Paolo | B |
12003 | Verdi | Giovanna | B |
12004 | Neri | Maria | A |
12005 | Russo | Nicola | A |
ESEMPIO 7. Vogliamo aggiornare un record nella tabella (lo studente Neri Maria si sposta dal corso A al corso B): la query
update studente set corso=’B’ where matricola=’12004’
aggiorna i dati, così ora la tabella è
MATRICOLA | COGNOME | NOME | CORSO |
12001 | Rossi | Mario | A |
12002 | Bianchi | Paolo | B |
12003 | Verdi | Giovanna | B |
12004 | Neri | Maria | B |
12005 | Russo | Nicola | A |
Si presti molta attenzione alla “pericolosità” del comando update: se ci si dimentica la clausola where si rischia di aggiornare per errore l’intera colonna di una tabella (nel nostro esempio, se si scrivesse update studente set corso=’B’ si avrebbe come risultato che in ogni riga della tabella ci sarebbe B nella colonna CORSO)
ESEMPIO 8. Vogliamo eliminare un record dalla tabella (lo studente matricola 12002 viene eliminato dall’archivio)
delete from studente where matricola=’12002’
elimina una riga dalla tabella, così ora la tabella è
MATRICOLA | COGNOME | NOME | CORSO |
12001 | Rossi | Mario | A |
12003 | Verdi | Giovanna | B |
12004 | Neri | Maria | A |
12005 | Russo | Nicola | A |
Si noti che questa ultima operazione è insolita, perché spesso i dati vengono conservati e solamente “marcati per la cancellazione” in maniera che non risultino visibili, ma sia sempre possibile recuperarli (il concetto è simile a “sposta nel cestino” di Windows).
Comandi avanzati e transazioni
Oltre ai fondamentali (SELECT, INSERT, UPDATE, DELETE) esistono altri comandi SQL importanti da conoscere come ad esempio: GROUP BY, DISTINCT e quelli che permettono di operare su più tabelle facendo le cosiddette JOIN.
L’effetto di un comando SQL è definitivo (non sono annullabili) a meno che i comandi non siano inseriti all’interno di una transazione: un processo che viene visto come unico e come tale è reversibile.
Alcuni comandi per le transazioni: BEGIN TRANSACTION, COMMIT, ROLLBACK
Comandi SQL (DDL)
I comandi DDL (Data Definition Language) non modificano i dati, ma servono a gestirne la struttura.
Esempi di comandi DDL:
- su un intero database: CREATE DATABASE, ALTER DATABASE, DROP DATABASE
- su tabelle: CREATE TABLE, ALTER TABLE, DROP TABLE
- su indici: CREATE INDEX, DROP INDEX
Come iniziare
Esistono software con funzionalità di wizard (assistenti) che permettono di generare query, anche visualmente, senza conoscere il linguaggio SQL. Crediamo però che sia fondamentale la conoscenza del linguaggio SQL, così da poter effettivamente “dominare” i processi di manipolazione dei dati.
Un ottimo punto di partenza è il sito w3school dove ci si può esercitare interattivamente sui vari linguaggi che hanno a che fare con il web (e dunque anche con l’SQL, utilizzato in ogni sito dinamico).
Bibliografia: Rossignoli, N., Informatica per i beni culturali, Lampidistampa, Milano, 2010