Torna all'elenco degli articoli Articoli
Tempo di lettura: 11 minuti

Sintassi SQL

Nell'articolo di oggi, vi illustreremo la sintassi SQL di base, con particolare attenzione ai comandi SELEZIONA, INSERISCI INTO, AGGIORNAREe CANCELLA e DELETE.

SQL è un linguaggio di programmazione progettato specificamente per comunicare con i database. Consente di ottenere i dati da un database o di modificare i dati al suo interno.

Come ogni linguaggio di programmazione, SQL ha una sintassi da rispettare. In altre parole, ci sono delle regole da seguire per quanto riguarda i suoi comandi se si vuole che il codice funzioni.

La sintassi SQL si impara meglio con le istruzioni SQL di base. In seguito, è possibile basarsi su di esse e scrivere codice più complesso seguendo le stesse regole. Se siete alle prime armi con l'SQL, vi consigliamo il nostro SQL Basics corso interattivo. Copre l'istruzione SELECT e altre istruzioni e funzioni SQL molto comuni. Ad esempio, imparerete a filtrare i dati utilizzando la clausola WHERE e gli operatori logici. Questo corso vi insegnerà a combinare i dati di più tabelle utilizzando JOIN, ad aggregare i dati in gruppi utilizzando GROUP BY e a combinare i risultati delle query utilizzando gli operatori di set UNION, UNION ALL e INTERSECT.

Con oltre 120 esercizi interattivi, SQL Basics è un buon inizio per imparare a usare SQL. Potete anche utilizzare il nostro foglio informativo gratuito SQL Basics mentre leggete questo articolo.

Abbiamo già parlato più volte di database. Che cosa hanno di così specifico da richiedere un linguaggio di programmazione dedicato?

Come sono organizzati i database?

I database sono costituiti da una o più tabelle. Lo scopo delle tabelle è quello di memorizzare i dati in modo organizzato. La parola chiave è "organizzato", il che significa che le tabelle devono avere una certa struttura.

Ogni tabella ha un nome per differenziare le tabelle all'interno del database, preferibilmente un nome sufficientemente descrittivo per sapere quali dati sono memorizzati in quella tabella.

Ogni tabella ha delle colonne che hanno anche un nome. Le colonne definiscono i dati della tabella, mentre i nomi delle colonne li descrivono. Le tabelle hanno anche delle righe, dove vengono memorizzati i dati. Ad esempio, la tabella seguente è denominata employees. Ha le seguenti colonne:

  • id - Il numero identificativo del dipendente.
  • first_name - Il nome del dipendente.
  • last_name - Il cognome del dipendente.
  • salary - Lo stipendio del dipendente.
  • department - Il reparto del dipendente.

I dati della tabella sono mostrati di seguito:

idfirst_namelast_namesalarydepartment
1NancyChapman1,486.13Operations
2SteveMason2,886.25Accounting
3KateWilliams1,158.44Accounting
4FrankHasbeen5,711.49Operations
5HillaryAdailton3,066.52Operations
6DanielJackson3,066.52Sales
7SusanDeutsch5,039.13Operations
8DereckVans4,434.27Sales
9SamNelson2,044.19Accounting
10MariaLopez1,995.32Accounting

Come si può notare, la tabella ha dieci righe e ogni riga contiene i dati di un dipendente.

Dichiarazioni SQL comuni e loro sintassi

Per utilizzare l'SQL per interrogare i dati, sono necessarie le istruzioni SQL. Si tratta di comandi impartiti al database, che esegue un compito in base a quanto scritto nel codice.

Le istruzioni SQL terminano solitamente con un punto e virgola. Non è una parte obbligatoria della sintassi: la query funzionerà lo stesso anche senza. Tuttavia, terminare le istruzioni SQL con un punto e virgola è una buona pratica. Aumenta la leggibilità del codice, soprattutto quando si scrive molto codice. Negli esempi che seguono, ci atterremo a questa pratica.

Passiamo ora in rassegna alcune delle istruzioni SQL più comuni.

Istruzione SELECT

L'istruzione SELECT è utilizzata per recuperare i dati dai database. È possibile selezionare tutti i dati o solo le informazioni contenute in colonne specifiche. È anche possibile filtrare i dati, eseguire calcoli e aggregazioni di dati e fare altre cose all'interno di questa istruzione.

Vediamo alcune delle possibilità di SELECT e come funziona la sua sintassi.

Selezionare tutti i dati dalla tabella

La sintassi per selezionare tutti i dati dalla tabella è la seguente:

SELECT *
FROM table;

Per prima cosa, si scrive SELECT, dopo di che si specifica che si vogliono selezionare tutti i dati. Quando si dice "tutti i dati", si intende "tutte le colonne della tabella": un asterisco (*) nell'istruzione SELECT serve proprio a questo.

Successivamente, è necessario indicare al database da quale tabella si desidera prelevare i dati. Questa è la seconda riga del codice, che inizia con la clausola FROM. Essa annuncia che la tabella sarà specificata subito dopo questa parola, quindi è sufficiente scrivere il nome della tabella.

Ecco come funziona:

SELECT *
FROM employees;

Questo codice si traduce in 'seleziona tutte le colonne dalla tabella employees. E fa esattamente questo!

idfirst_namelast_namesalarydepartment
1NancyChapman1,486.13Operations
2SteveMason2,886.25Accounting
3KateWilliams1,158.44Accounting
4FrankHasbeen5,711.49Operations
5HillaryAdailton3,066.52Operations
6DanielJackson3,066.52Sales
7SusanDeutsch5,039.13Operations
8DereckVans4,434.27Sales
9SamNelson2,044.19Accounting
10MariaLopez1,995.32Accounting

Selezionare colonne specifiche dalla tabella

L'unica differenza rispetto alla sintassi precedente è che si elencano colonne specifiche invece di scrivere un asterisco:

SELECT column1,
	 column2
FROM table;

Quando si elencano le colonne, è importante separarle con una virgola, altrimenti il codice non funzionerà.

È anche importante notare che non c'è una virgola dopo l'ultima colonna.

Anche se non è necessario scrivere ogni colonna della tabella in una nuova riga, è una buona pratica. Si consiglia di seguirla. Aiuta la leggibilità del codice quando le dichiarazioni diventano più complesse. La presenza di ogni colonna in una riga separata rende più facile seguire quali colonne sono state selezionate e se si è commesso un errore di sintassi (ad esempio, è più facile notare che si è persa una virgola tra i nomi delle colonne).

Utilizziamo questa sintassi per la nostra tabella di esempio:

SELECT first_name,
	 last_name
FROM employees;

Questa query seleziona le colonne first_name e last_name dalla tabella employees.

first_namelast_name
NancyChapman
SteveMason
KateWilliams
FrankHasbeen
HillaryAdailton
DanielJackson
SusanDeutsch
DereckVans
SamNelson
MariaLopez

Filtrare i dati usando WHERE

L'istruzione SELECT consente di utilizzare altre clausole al suo interno, come ad esempio WHERE.

SELECT …
FROM table
WHERE …;

Si tratta della stessa istruzione SELECT di prima. L'unica differenza è che si scrive la clausola WHERE dopo aver specificato la tabella nella clausola FROM.

La clausola WHERE consente di filtrare i dati restituiti impostando una o più condizioni che devono essere soddisfatte.

Ad esempio:

SELECT first_name,
	 last_name,
	 salary
FROM employees
WHERE salary > 3000;

Questa query seleziona il nome e il cognome dei dipendenti e il loro stipendio. Queste sono tutte colonne della tabella employees. Tuttavia, voglio mostrare solo i dipendenti che hanno uno stipendio superiore a 3.000 euro. Per fare ciò, scrivo prima la clausola WHERE. Quindi viene posta la condizione: la colonna salary deve essere superiore a 3.000.

Ecco i dati restituiti dalla query:

first_namelast_namesalary
FrankHasbeen5,711.49
HillaryAdailton3,066.52
DanielJackson3,066.52
SusanDeutsch5,039.13
DereckVans4,434.27

Ci sono cinque dipendenti con uno stipendio superiore a 3.000 e sono tutti elencati sopra.

Questo è solo uno dei tanti modi per utilizzare WHERE. Per saperne di più, consultate questa guida alla scrittura della clausola WHERE.

Raggruppare le righe con GROUP BY

Se si utilizza la clausola GROUP BY nell'istruzione SELECT, è possibile raggruppare le righe in gruppi.

SELECT …
FROM table
GROUP BY …; 

La sintassi mostra un'istruzione SELECT standard. La clausola FROM è seguita dalla clausola GROUP BY, in cui si elencano le colonne in base alle quali si desidera raggruppare i dati. Le righe vengono raggruppate in base ai dati contenuti in una o più colonne specifiche; le righe con lo stesso valore di colonna saranno nello stesso gruppo.

Uno degli usi pratici di GROUP BY è il conteggio del numero di dipendenti di ciascun reparto. A tale scopo, è necessario selezionare la colonna department e utilizzare la funzione aggregata COUNT() per contare il numero di dipendenti. Utilizzando GROUP BY, è possibile raggruppare il risultato in base al reparto. Ed ecco il risultato: il numero di dipendenti per reparto.

Per esempi sul funzionamento di GROUP BY, leggete GROUP BY in SQL Explained o 5 esempi di GROUP BY.

Filtrare i dati con HAVING

La clausola HAVING è usata più spesso con la clausola GROUP BY. Ha lo stesso scopo di WHERE, ma WHERE filtra i dati prima dell'aggregazione, mentre HAVING filtra i record aggregati. Ecco perché bisogna sempre scrivere HAVING dopo GROUP BY:

SELECT …
FROM table
GROUP BY …
HAVING …;

Le condizioni in HAVING sono scritte allo stesso modo della clausola WHERE. Poiché filtra i dati dopo l'aggregazione, le funzioni aggregate sono consentite in HAVING.

Come si usa nella vita reale? Un esempio comune è quello di calcolare il salario medio per reparto e poi usare HAVING per mostrare solo i reparti con un salario medio superiore a una certa cifra.

Per esempi dettagliati sul funzionamento di questa clausola, vedere La clausola HAVING di SQL spiegata.

Ordinare i risultati delle query con ORDER BY

Una delle clausole comunemente utilizzate nell'istruzione SELECT è ORDER BY. Viene utilizzata per ordinare i risultati della query in ordine crescente o decrescente. A seconda del tipo di dati, ciò può significare ordinare i dati dal valore più alto a quello più basso, dalla data più vecchia o più recente, oppure in ordine alfabetico.

La clausola ORDER BY consente di ordinare i risultati in base a una o più colonne.

Ecco la sintassi:

SELECT …
FROM table
…
ORDER BY …;

Un uso semplice e pratico di ORDER BY è quello di ordinare i dipendenti in base al loro stipendio, dal più alto al più basso.

Alcuni esempi dettagliati di questa clausola sono disponibili in Come ordinare i record con la clausola ORDER BY.

Istruzione INSERT INTO

Questo comando viene utilizzato per inserire dati nel database. Ecco la sintassi:

INSERT INTO table (column1, column2, …)
VALUES (value1, value2, …);

Dopo INSERT INTO, si deve scrivere il nome della tabella in cui si desidera inserire i dati. Poi, tra le parentesi, si scrivono le colonne che si vogliono modificare. Come in SELECT, le colonne sono separate da una virgola.

A questo punto si aggiunge il comando VALUES. Tra le parentesi si scrivono i valori che si desidera inserire nella tabella. Anche questi valori sono separati da virgole. Guardate questo esempio:

INSERT INTO employees (id, first_name, last_name)
VALUES (11, 'Obi-Wan', 'Kenobi');

Questa query inserisce i dati nella tabella employees. Modifica le colonne id, first_name e last_name. La nuova riga inserita nella tabella sarà quella del dipendente Obi-Wan Kenobi, il cui ID è 11.

Se si selezionano tutte le colonne di questa tabella (sapete come fare!), ecco cosa si ottiene:

idfirst_namelast_namesalarydepartment
1NancyChapman1,486.13Operations
2SteveMason2,886.25Accounting
3KateWilliams1,158.44Accounting
4FrankHasbeen5,711.49Operations
5HillaryAdailton3,066.52Operations
6DanielJackson3,066.52Sales
7SusanDeutsch5,039.13Operations
8DereckVans4,434.27Sales
9SamNelson2,044.19Accounting
10MariaLopez1,995.32Accounting
11Obi-WanKenobiNULLNULL

Poiché non ho impostato i valori di stipendio e reparto per il nuovo dipendente, questi sono vuoti. Il database utilizza NULL per contrassegnare i valori vuoti.

Dichiarazione UPDATE

UPDATE viene utilizzata per modificare i dati della tabella. Questo comando viene solitamente eseguito con la clausola WHERE. In caso contrario, tutti i dati della tabella verrebbero modificati.

La sintassi è la seguente:

UPDATE table
SET column1 = value1, column2 = value2, …
WHERE …;

Dopo aver scritto UPDATE, si scrive il nome della tabella da aggiornare. Poi viene il comando SET. Imposta le colonne a un valore specifico. In altre parole, si dice quale colonna si vuole aggiornare e con quali valori. Si usa un segno di uguale per impostare i valori, con ogni colonna e il suo nuovo valore separati da una virgola. WHERE serve a limitare gli aggiornamenti solo ai valori che soddisfano una condizione specifica.

Ecco un esempio di aggiornamento dei valori nella tabella employees:

UPDATE employees
SET department = 'Sales'
WHERE id = 2;

In questa query, si specifica che si vuole aggiornare la tabella employees. Poi voglio avere il valore 'Sales' nella colonna department per il dipendente il cui ID è 2. Questo dipendente si è spostato dalla contabilità alle vendite; ecco perché è necessario questo aggiornamento.

Ecco la tabella aggiornata:

idfirst_namelast_namesalarydepartment
1NancyChapman1,486.13Operations
2SteveMason2,886.25Sales
3KateWilliams1,158.44Accounting
4FrankHasbeen5,711.49Operations
5HillaryAdailton3,066.52Operations
6DanielJackson3,066.52Sales
7SusanDeutsch5,039.13Operations
8DereckVans4,434.27Sales
9SamNelson2,044.19Accounting
10MariaLopez1,995.32Accounting
11Obi-WanKenobiNULLNULL

Il risultato mostra che Steve Mason è ora nelle Vendite.

Dichiarazione DELETE

Come probabilmente avrete intuito, questo comando viene utilizzato per eliminare i dati dalla tabella.

Anche in questo caso, la clausola WHERE svolge un ruolo importante. Permette di eliminare solo alcuni dati, cioè quelli che soddisfano la condizione della clausola WHERE. Se si omette WHERE, l'istruzione DELETE cancella tutti i dati dalla tabella.

Questa è la sintassi:

DELETE
FROM table
WHERE …;

Dopo DELETE viene la clausola FROM. Simile all'istruzione SELECT, contiene il nome della tabella da cui si desidera eliminare i dati. Dopo di essa, assicuratevi di scrivere la clausola WHERE se non volete cancellare tutti i dati della tabella.

Ecco un esempio pratico:

DELETE 
FROM employees
WHERE id = 11;

Questa query cancella tutte le righe in cui l'ID è 11. Ecco il risultato:

idfirst_namelast_namesalarydepartment
1NancyChapman1,486.13Operations
2SteveMason2,886.25Sales
3KateWilliams1,158.44Accounting
4FrankHasbeen5,711.49Operations
5HillaryAdailton3,066.52Operations
6DanielJackson3,066.52Sales
7SusanDeutsch5,039.13Operations
8DereckVans4,434.27Sales
9SamNelson2,044.19Accounting
10MariaLopez1,995.32Accounting

Ho eliminato il nuovo dipendente Obi-Wan Kenobi dalla tabella.

Dalla sintassi SQL alle dichiarazioni SQL

Per fare un'affermazione in SQL, come in qualsiasi altro linguaggio naturale, è necessario conoscere la sua sintassi. Questo apre molte porte altrimenti chiuse.

Come si è visto, conoscendo solo le basi è possibile selezionare i dati dalla tabella, filtrarli e raggrupparli. Questa è l'istruzione SELECT, e conoscere questo comando di base è solo l'inizio. Esistono altre istruzioni SQL comuni che consentono di inserire dati nella tabella, modificarli o cancellarli.

Qualsiasi linguaggio si impara più velocemente se lo si usa tutti i giorni. Nel caso di SQL, ciò si traduce nello scrivere codice regolarmente. Trovare occasioni per "parlare" SQL può essere difficile, ma non preoccupatevi. Ce ne sono molte nel corso. SQL Basics corso. Provate. Prima che ve ne accorgiate, sarete fluenti in SQL!