Lo Structured Query Language, più conosciuto come linguaggio SQL, è il linguaggio di programmazione standard per la manipolazione di un Database relazionale. Un Database è una struttura dati che può essere più o meno complessa, in cui memorizzare diversi tipi di informazioni.
Il concetto di memorizzazione ha ricoperto un ruolo fondamentale nello sviluppo delle attuali tecnologie informatiche, supportando la nascita di software e hardware sempre più potenti che avevano bisogno di un seguire un approccio diverso per l’organizzazione dei dati.
Dobbiamo all’informatico Edgar F. Codd, ricercatore dell’IBM, che negli anni ‘70 ha creato le basi dell’approccio relazionale, l’introduzione del concetto di tabella basata su uno schema rigido di regole.
Ogni tabella è formata da delle righe, dette Record, in cui immagazzinare dati.
Potete immaginarla come un foglio excel che organizza le informazioni in righe e colonne.
Un esempio: dovete salvare dati relativi ai componenti di un’aula scolastica, ogni riga della tabella sarà uno studente, mentre ogni colonna rappresenterà un’ informazione relativa a quello studente; Potremo avere una colonna per il Nome, una per il Cognome e una per il Sesso.
Cosa molto importante, servirà una colonna per identificare univocamente un singolo studente, in modo da prevenire casi di omonimia.
Per risolvere questo problema è norma comune creare un campo contenente un valore univoco ID.
Un esempio di tabella può essere il seguente:
ID |
Nome |
Cognome |
Sesso |
1 |
Giuseppe |
Rossi |
M |
2 |
Luisa |
Rossi |
F |
3 |
Giovanni |
Rossi |
M |
I dati nelle diverse tabelle sono in relazione attraverso valori collegati tra di loro che permettono di incrociare diversi record in diverse tabelle; inoltre per facilitare la gestione di una sempre più crescente mole di dati, sono nati potenti software denominati DBMS – Database Management System – (esempi che sicuramente conosci sono Oracle, MySQL, SQLite e molti altri.)
Tutti questi software comunicano con un solo linguaggio, o con un suo dialetto, questo linguaggio è proprio SQL.
Linguaggio SQL
Ma SQL cos è? In definitiva, il linguaggio SQL è un linguaggio che si avvicina moltissimo a quello umano, per questo motivo risulta di facile comprensione anche per chi è alle prime armi.
Viene utilizzato per effettuare delle interrogazioni o query al database, con lo scopo di recuperare dati, anche tra più tabelle, sfruttando le relazioni logiche e soprattutto l’operatore JOIN.
Esistono diversi tipi di operazioni che possono esser fatte con il linguaggio SQL, le più comuni consentono di:
- Creare un Database e una Tabella del database
- Inserire dati
- Aggiornare dati
- Cancellare dati
- Estrarre e leggere specifici set di dati
Queste operazioni rientrano nella categoria comunemente conosciuta come CRUD (acronimo di Create, Read, Update e Delete), parola che ha assunto un significato di carattere generale per indicare tutto ciò che è possibile fare con un set di dati.
Ognuna di queste operazioni è collegata ad un comando SQL:
- SELECT: permette di estrarre dati
- UPDATE: permette di aggiornare i dati
- DELETE: permette di cancellare dati
- CREATE DATABASE: permette di creare database
- CREATE TABLE: permette di creare tabelle
- INSERT INTO: permette di inserire nuovi dati in un database
Altri comandi utili sono
- CREATE INDEX: crea un indice, utile per velocizzare le query
- DROP INDEX: cancella uno specifico indice
- ALTER DATABASE: permette di modificare un database
- ALTER TABLE: permette di modificare una tabella
Cosa molto importante: ogni query SQL deve finire con un punto e virgola! Inoltre SQL è case-insensitive nei confronti dei suoi comandi, ciò vuol dire che scrivere SELECT o select porta allo stesso risultato. Tuttavia è case-sensitive quando si scrivono i nomi delle tabelle o dei campi di riferimento.
Sintassi della Select
SELECT * FROM students;
il simbolo * indica “tutto”, questa select recupererà tutti i record della tabella students.
Esempi di query SQL
Partendo dalla creazione della tabella students, analizziamo alcune query SQL e la loro sintassi.
-
Creazione tabella
CREATE TABLE students (
id INTEGER,
nome TEXT,
cognome TEXT,
sesso TEXT
);
N.B: La creazione di questa tabella deve essere fatta all’interno di un database precedentemente creato.
Procediamo con l’inserimento di qualche dato.
-
Inserimento Dati
INSERT INTO students (id, nome, cognome, sesso)
VALUES (1, 'Giuseppe', 'Rossi', 'M');
-
Lettura Dati
Select * from students;
Questa query estrarrà indistintamente tutti i dati dalla tabella students. Se invece volessimo leggere solo un loro subset, ad esempio solo il nome degli studenti, bisognerebbe indicare il campo desiderato, sostituendolo all’asterisco in questo modo:
Select nome from students;
-
Modifica Tabella
Se in corso d’opera ti rendi conto che necessiti di tener traccia di un altro dato relativo agli studenti, per esempio la loro età, dovrai aggiungere una nuova colonna alla tabella students, per far ciò useremo il comando ALTER TABLE:
ALTER TABLE students
ADD COLUMN età INTEGER;
Ora che abbiamo una nuova colonna dovremo valorizzare il valore età per i dati già inseriti, per far questo ci avvarremo del comando UPDATE:
UPDATE students
SET età = 18
WHERE id = 1;
Da notare l’utilizzo del WHERE, uno degli strumenti più potenti SQL. Viene usato per filtrare i record in base ad un criterio, in questo caso usiamo l’identificativo univoco ID, per esser certi di riferirci allo studente da noi cercato.
Un altro esempio di utilizzo del WHERE: immaginiamo di recuperare tutti gli studenti che si chiamano ‘Giuseppe’
SELECT * FROM students WHERE nome = "Giuseppe";
Attenzione al case-sensitive. Come già detto, nelle query bisogna fare attenzione al case-sensitive dei campi inseriti, ad esempio se al posto di ‘Giuseppe’ avessimo scritto ‘giuseppe’, con l’iniziale minuscola, la query avrebbe avuto un risultato diverso. SQL è case-insensitive solo per quanto riguarda i suoi comandi proprietari!
Un altro elemento inderogabile nella conoscenza del linguaggio SQL sono i vincoli.
Vincoli
I vincoli servono per garantire l’integrità delle informazioni presenti in un database (data integrity) e perciò la sua affidabilità.
Per garantire ciò, esistono diversi vincoli di integrità, ossia delle regole che impongono i valori che possono essere inseriti; è possibile applicare queste regole su singole colonne o anche su più tabelle.
Esistono 3 tipi di vincoli da tenere a mente:
- Vincoli di integrità delle colonne: specificano i valori che possono assumere le singole colonne.
Esempio: DEFAULT | CHECK | NOT NULL
- Vincoli di integrità sulle tabelle: specificano delle restrizioni da applicare su tutte le righe di una tabelle.
Esempio: PRIMARY KEY | UNIQUE | CHECK
- Vincoli di integrità referenziale: impongono restrizioni sui valori che una colonna, in relazione ad un’altra colonna, può assumere.
Esempio: FOREIGN KEY | REFERENCES
Nella fase di realizzazione del database, sarà compito del programmatore informatico implementare sui dati previsti i diversi vincoli che il linguaggio SQL mette a disposizione.
Rifacendoci all’esempio precedente della creazione della tabella students, proviamo a ricrearla, questa volta definendo dei vincoli.
CREATE TABLE students (
id INTEGER PRIMARY KEY,
nome TEXT NOT NULL,
cognome TEXT NOT NULL,
sesso TEXT,
età INTEGER DEFAULT 16,
CHECK (età >= 16)
);
In questo esempio la PRIMARY KEY dice alla tabella che quel campo serve ad identificare univocamente una riga, garantendo che non potranno esserci ID con lo stesso valore. Il vincolo NOT NULL garantisce che, nel momento di inserimento dati, quei campi dovranno essere obbligatoriamente valorizzati. Il vincolo DEFAULT garantisce che quel campo abbia comunque un valore nel caso in cui non fosse specificato durante la INSERT. Infine, abbiamo il vincolo CHECK che inserisce un limite di range al valore che il campo età potrà assumere. Il fallimento di uno di questi vincoli bloccherà il processo di esecuzione delle query.
Ci sono altre parole chiave che SQL possiede e che tutti coloro che si accingono a diventare web developer dovrebbero conoscere.
AS: consente di creare un alias per una colonna o una tabella.
SELECT età AS yearsOld
FROM students;
DISTINCT: consente di filtrare i duplicati da una colonna e ritornare solo valori univoci.
SELECT DISTINCT nome
FROM students;
LIKE: usato nelle WHERE per confrontare valori che rispettano un determinato pattern. Nell’esempio successivo:
SELECT *
FROM students
WHERE nome LIKE 'G%';
IS NULL e IS NOT NULL: usato nella WHERE per filtrare quei record che hanno un valore assegnato o non assegnato al campo indicato dopo la where:
SELECT *
FROM students
WHERE sesso IS NULL;
AND e OR: usato nella WHERE per aggiungere più criteri di valutazione nella condizione di filtro:
SELECT *
FROM students
WHERE nome LIKE 'G%'
AND età > 16;
Esistono altre parole chiave del linguaggio SQL come ORDER BY, LIMIT, BETWEEN ecc.. ragione per cui ti consigliamo di approfondire sfruttando le decine di risorse online gratuite e facilmente accessibili. Uno dei siti che assolutamente consigliamo a tal scopo è w3schools, dove potrai trovare un elenco esaustivo di tutte le funzionalità SQL con allegato esempi e casi d’uso.
Conclusioni
La conoscenza del linguaggio SQL resta una delle competenze più importanti in assoluto per tutti coloro che si accingono a lavorare con i dati, tra cui anche la categoria dello sviluppatore web, indipendentemente dal fatto che stiano pian piano prendendo piede le basi di dati basate sul NoSQL, cioè che non utilizzano SQL.
Non dimentichiamoci di figure come il Data Scientist o il Data Engineer, sempre più richieste sul mercato nazionale e internazionale con prospettive di guadagno davvero sopra la media (un senior Data Engineer in italia arriva a guadagnare fino a 4.000€* netti al mese!). Vuoi saperne di più? Corri a leggere la nostra guida SQL in italiano!
*Fonte: talent.it