Le librerie e il web sono piene di manuali sul linguaggio SQL, molti dei quali estremamente precisi e approfonditi. Io voglio provare ad approcciarmi alla didattica in maniera diversa, non soffermandomi sulla sintassi, ma sul ragionamento necessario per tradurre del linguaggio naturale in una query SQL. Ritengo che la natura dichiarativa dell’SQL richieda un approccio didattico differente rispetto agli altri linguaggi di programmazione.
Negli anni ’70, prima di una disputa legale per ragioni di brevetto, il nome del nostro linguaggio preferito era SEQUEL. Purtroppo la caduta della “E” ha tolto evidenza ad un aspetto molto significativo del nome: la lettera “E” stava per “English” per sottolineare la stretta vicinanza tra l’SQL e la lingua inglese parlata nel quotidiano.
Come parliamo e come programmiamo?
Nel libro Training Kit (Exam 70-461) Querying Microsoft SQL Server 2012 (MCSA) troviamo un esempio chiarificatore: ad un essere umano ci rivolgiamo in modo naturale con una frase del tipo
“Prendi una mela dal frigorifero”.
Se parlassimo ad un robot (o programmassimo in un altro linguaggio) riformuleremmo la frase in questo modo più algoritmico
“Vai al frigorifero e prendi una mela”
in quanto sentiremmo l’esigenza di impartire le istruzioni con un ordine più rigido. Ebbene, la programmazione in Sql ricalca il primo modo di esprimersi, quello tra esseri umani. Quando scriviamo una query SQL dobbiamo specificare prima i nomi delle colonne (all’interno della clausola select) e solo in seguito il nome delle tabelle (nella clausola from). Con un po’ di fantasia, la query esatta sarà
SELECT mela FROM frigorifero
invece di una più algoritmica
FROM frigorifero SELECT mela
SQL è un linguaggio dichiarativo
L’SQL è un linguaggio di programmazione dichiarativo si concentra su cosa il programma deve fare, senza concentrarsi sul come o sull’algoritmo specifico. Tramite l’SQL chiederemo ad esempio al database di creare una nuova tabella, di estrarre le informazioni da una vista applicando dei filtri e dei raggruppamenti o di modificare il tipo di una colonna. Ma per far ciò non avremo mai bisogno di implementare algoritmi o utilizzare i comuni costrutti della programmazione procedurale come IF, WHILE o FOR.
Facciamo un esempio per rendere più chiara la questione: per estrarre l’elenco dei codici fiscali dei clienti residenti nella regione Lombardia, con un linguaggio procedurale potremmo scrivere un algoritmo del genere:
- consideriamo la particolare struttura dati contenente le informazioni sui clienti (si potrebbe trattare ad esempio di una lista o un array);
- tramite un ciclo FOR scansioniamo tutti gli elementi della lista;
- tramite un IF, consideriamo soltanto i clienti residenti in Lombardia. In quel caso salviamo il codice fiscale in un array di output.
L’approccio dichiarativo è completamente diverso: lo sviluppatore scriverà una semplice query con il linguaggio SQL:
SELECT CodiceFiscale
FROM Clienti
WHERE RegioneResidenza = 'Lombardia';
e demanderà al RDBMS (Relational Database Management System) l’onere di tradurre ed eseguire la query.
Primi passi con l’SQL
Partendo da queste premesse, ho creato una video lezione che accompagni il lettore nella scrittura delle prime query in SQL.
Continua a imparare
- Segui la lezione successiva sulla Where SQL
- Torna all’indice delle lezioni
- Visita la pagina del mio videocorso SQL