Nonostante con i computer si possa fare qualsiasi cosa, sono nati in realtà per compiere un’unica importante missione: espandere la mente umana. O meglio: fare in maniera efficiente, continuata ed instancabile quello che la mente umana non poteva fare negli stessi modi e tempi o con la stessa sostenibilità. Per questo i computer hanno iniziato a svolgere calcoli veloci, esatti e difficili (il concetto del calcolo si trova proprio nell’origine della parola “computer”) e a memorizzare dati. Quest’ultimo ambito si è sviluppato notevolmente e ha cambiato obiettivi e modalità più volte, da quando gli archivi erano contenuti in pochi kilobyte fino all’epoca dei Social Network e dei Big Data in cui ogni secondo vengono scambiati terabyte di dati.
Al centro di questa evoluzione un ruolo fondamentale l’hanno svolto i database, archivi di dati ben strutturati che possono essere recuperati e salvati in maniera efficiente. In particolare, chi l’ha fatta e la fa ancora da padrone a partire dagli anni Settanta sono l’approccio relazionale ed il linguaggio SQL. In questa guida li ripercorriamo incontrandone principi, strumenti e prospettive.
Quando le tecnologie hardware per la memorizzazione di dati hanno iniziato a dischiudere nuovi scenari, gli approcci fino ad allora seguiti per l’organizzazione fisica dei dati hanno mostrato i propri limiti. Per quello, negli anni Settanta, Edgar F. Codd, ricercatore dell’IBM, ha steso i fondamenti dell’approccio relazionale: i dati sarebbero stati strutturati in più tabelle basate su uno schema rigido. Ogni tabella doveva archiviare per righe (dette record) i dati relativi ad un medesimo tipo di informazione appartenente alla base di dati. Per avere un’idea di come sia fatta una tabella, puoi pensare ad un foglio Excel o di qualsiasi altro programma simile: una griglia di informazioni, insomma.
Tra le tabelle, i dati venivano messi in relazione tra loro con l’applicazione di valori collegati dall’una all’altra e questo permetteva di svolgere delle interrogazioni in grado di incrociarli fruttuosamente.
In realtà un database è molto molto di più ma questi sono i principi alla base di questi strumenti usatissimi nello sviluppo di applicazioni: dai grandi motori di elaborazione bancari e industriali, alle applicazioni mobile o ai siti Internet. Nonostante siano passati molti anni, tutto ciò ancora vive in software come Oracle, MySQL, SQLite, Access e molti altri.
Vive e soprattutto parla, grazie alla sua lingua ormai universale: SQL.
Per definire i vari comandi da svolgere su un database è stato pensato un linguaggio molto comodo e sintetico le cui direttive somigliavano a frasi in lingua inglese: il linguaggio SQL (Structered Query Language).
Il nome stesso del linguaggio contiene il termine query, ormai piuttosto diffuso, che indica un’interrogazione (un’operazione di lettura) da svolgere su un database. Il suo scopo è quello di recuperare dati eventualmente sviluppando il legame stabilito con le relazioni: tali operazioni a tabelle “incrociate” prendono il nome di JOIN.
SQL è diventato sinonimo di accesso ai database ed ogni linguaggio di programmazione si è munito nel tempo di strumenti per poter inviare comandi in SQL. Per questo, tale formalismo risulta uno dei più usati al mondo e conoscenza fondamentale per qualsiasi professionista dell’Informatica.
Ma quali sono le principali operazioni che possono essere svolte con il linguaggio SQL?
Con il linguaggio SQL si possono svolgere vari tipi di operazioni: dalla creazione e rimozione del database stesso, a quelle architetturali (creazione, modifica e distruzione di tabelle e altri elementi interni del database) ma soprattutto quelli di elaborazione dati, oggetto di questo paragrafo.
Le operazioni fondamentali per la lettura e la manipolazione dei dati in SQL sono di quattro tipologie:
L’acronimo che si forma con le iniziali dei termini Create, Read, Update, Delete è CRUD ed è diventato il sinonimo – nei database ma anche in altri contesti – dell’insieme delle operazioni che possiamo svolgere su un set di dati.
Ad ognuna di queste operazioni, corrisponde uno specifico comando SQL. Gli inserimenti, operazioni di Create, vengono svolte con il comando INSERT. Il comando SQL:
INSERT INTO citta (nome, regione, popolazione) VALUES (‘Milano', ‘Lombardia', 1385023)
significa che esiste nel nostro database una tabella di nome citta che ha almeno tre colonne denominate nome, regione e popolazione e vi vogliamo aggiungere all’interno una nuova riga in cui queste tre colonne saranno riempite, rispettivamente, con le due stringhe ‘Milano’ e ‘Lombardia’ ed il numero 1385023. Senza scendere troppo nei dettagli tecnici si vede che il comando SQL potrebbe essere letto quasi come una frase in inglese ed il suo significato è piuttosto evidente anche per i meno esperti.
Con le query possiamo mettere in pratica le operazioni di READ. Volessimo estrarre da citta tutte le righe potremmo semplicemente dire:
SELECT * FROM citta
Ovvero “seleziona tutto dalla tabella citta”. L’asterisco indica che vogliamo tutte le colonne ma potremmo richiedere, ad esempio, solo nome e popolazione dei centri abitati:
SELECT nome, popolazione FROM citta
Anche in questo caso si vede che il comando SQL è piuttosto esplicito e proprio con il SELECT il linguaggio SQL esprime tutta la sua potenza. Si consideri infatti che con l’aggiunta di una clausola WHERE possiamo apporre le condizioni per un filtro indicando quali righe restituire come risultati mentre con il GROUP BY potremmo richiedere di raggruppare le righe in diverse sezioni in base al valore di un particolare campo: questi e poche altre funzioni rendono già il linguaggio SQL un perfetto ambiente di elaborazione dati.
La modifica di dati viene svolta con il comando UPDATE. Supponendo ad esempio che nella tabella città fosse stato inserito un valore errato per la popolazione potremmo applicare una modifica dicendo:
UPDATE citta SET popolazione = 1385023 WHERE nome='Milano'
Ovvero “modifica la tabella citta assegnando il valore 1385023 al campo popolazione a tutte le righe in cui il campo nome è impostato a Milano”. Ciò avverrà presumibilmente su una sola riga ma UPDATE è in grado di modificare alcune o tutte le righe di una tabella in base al criterio impostato dopo il WHERE.
Con il comando:
DELETE FROM citta WHERE regione='Lombardia'
epureremmo dalla tabella tutte le righe in cui il campo regione è impostato a Lombardia e questo sarebbe un esempio di operazione di Delete, la lettera D dell’acronimo CRUD.
Come si può immaginare, da studiare ci sarebbe ancora molto ma questi esempi dimostrano come l’approccio concettuale al linguaggio SQL non sia affatto proibitivo: le tabelle in fin dei conti possono essere immaginate in quanto sono una struttura dati piuttosto comune nella nostra vita e SQL si applica perfettamente alla loro modellazione in campi.
Iscriviti su devACADEMY e SEGUI TUTTI I CORSI che vuoi!
OLTRE 70 CORSI di coding A TUA DISPOSIZIONE con un’unica iscrizione 🙂
Il linguaggio SQL ha offerto una modalità così chiara di lavorare con i dati ed è così conosciuto che è diventato in breve tempo il modello per antonomasia di accesso ai dati. Ad esempio, per poter svolgere elaborazioni su set di informazioni si possono usare linguaggi di programmazione, framework, tool visuali e molto altro e studiarli non è sempre così semplice. Come si potrebbe spiegare quali sono le operazioni principali da conoscere di uno strumento del genere? Se chi deve impararlo ha già qualche esperienza informatica saprà molto probabilmente SQL quindi quale modo migliore per farlo se non confrontarlo proprio con SQL? Non capiterà raramente che ci si sentirà dire “Hai presente il SELECT di SQL? Ecco nel framework XYZ si fa in questo modo…”. SQL quindi non solo come strumento operativo ma anche come lingua di comunicazione in generale ha in informatica una grandissima valenza.
Altro esempio: i servizi web o web service. Sono delle applicazioni che attraverso Internet gestiscono dati e possono essere invocati da programmi esterni (app mobile, siti web, altri web service e via dicendo). Come si chiama il set di operazioni che un servizio web può svolgere? Operazioni CRUD ovvero tutto ciò che nel suo set di dati (molto spesso un database su server) un web service può creare, leggere, modificare e cancellare. Chiunque si troverà a studiare un modello per servizi web diffuso come il pattern REST ne avrà una conferma immediata. Anche questa concezione è diretta discendenza dell’esperienza che nell’Informatica ha fornito SQL.
Alcuni anni fa, è sembrato improvvisamente che il mondo fosse stufo di SQL e che questo non fosse più in grado di soddisfare le sue esigenze. Nasceva il movimento NoSQL, un’ondata concettuale e tecnologica che proponeva alternative efficienti e moderne ai classici database basati sul modello relazionale. Così si sono diffusi alcuni dei database più usati al mondo come MongoDB e Redis che in effetti possono apparire più adeguati per determinati contesti ma che non sono comunque riusciti a superare in importanza i principali sistemi relazionali. Comunque vale la pena specificare che il termine NoSQL non indica un disprezzo totale di SQL bensì un tentativo di superare la concezione relazionale in alcuni punti. Inoltre molti di questi strumenti hanno internamente un linguaggio di interrogazione dati che può considerarsi SQL-like in quanto rispecchia in buona parte la sua sintassi e questo conferma quanto detto nel paragrafo precedente: SQL è considerato il paradigma universale di gestione dei dati.
Altra realtà che domina il settore della conservazione e dell’analisi dei dati, è quel grande bacino che risponde al nome Big Data. Questo è un insieme di tecnologie che permettono la gestione di grandi quantità di dati, accumulate ad altissima velocità e contraddistinti da una grandissima varietà. Anche questo non ha fatto dimenticare SQL. Infatti in primo luogo nei progetti Big Data possono essere coinvolti dati provenienti da database sia relazionali che NoSQL. Secondo, SQL ha dato ispirazione a formalismi usati nelle tecnologie Big Data come HiveQL usato nel framework Hive, creato da Facebook, o quello usato con Apache Spark, importante ambiente per Big Data, modulare e altamente performante (nei nostri corsi lo trattiamo nella versione Python, PySpark).
Assolutamente sì! Si potrebbe apparire estremisti ma essere un informatico senza conoscere questo linguaggio risulterebbe quasi difficile. Il tuo sito web in PHP gestisce dati? Probabilmente avrai bisogno di salvarli e recuperarli da un database MySQL. La tua app Android conserva informazioni in locale? Dovrai gestire il tuo archivio in un database SQLite. Lavori in un ufficio e vuoi automatizzare le pratiche? La tua suite Microsoft Office offre Access per la gestione di dati: è un database relazionale, permette di conseguenza di impostare vari tipi di query che puoi scrivere da solo nel suo SQL.
Insomma, SQL è uno strumento di lavoro indispensabile che permette di gestire dati e aprire la mente per abbracciare nuove esperienze dal NoSQL ai Big Data. Studiarlo è semplice e dà soddisfazione molto rapidamente: devACADEMY è il posto migliore per iniziare.