HTML CSS JAVASCRIPT SQL MYSQL PYTHON JAVA PHP C C++ C# PACKET TRACER CYBERSECURITY REACTTYPESCRIPTNODE.JSGIT & GITHUBDATA SCIENCEBOOTSTRAPGOKOTLINJQUERYDJANGOVUEANGULAR MONGODB POSTGRESQL SASS NUMPY PANDAS SCIPY DSA RUST SWIFT BASHXMLW3.CSSANGULARJSAIAWSPROGRAMMAZIONEEXCEL WORD POWERPOINT
Corso gratuito · Interattivo

Corso di SQL in italiano

Il tutorial completo per imparare SQL da zero: interrogare, filtrare, ordinare, unire e gestire i dati di un database relazionale. Ogni esempio si esegue davvero nel browser su un database di prova.

Introduzione a SQL

SQL (Structured Query Language) è il linguaggio standard per interrogare e gestire i database relazionali, cioè quelli organizzati in tabelle composte da righe (record) e colonne (campi). È usato da MySQL, PostgreSQL, SQLite, SQL Server, Oracle e praticamente ovunque si gestiscano dati.

Con SQL puoi leggere dati (SELECT), inserirli (INSERT), modificarli (UPDATE), eliminarli (DELETE) e definire la struttura del database (CREATE, ALTER, DROP). È una competenza richiestissima per chi lavora con i dati, il web e le applicazioni.

💡 In questo corso puoi eseguire SQL reale direttamente nel browser. È già pronto un database di esempio con le tabelle studenti (id, nome, voto, classe, classe_id, citta) e classi (id, aula, classe). Ogni esecuzione riparte dai dati di esempio.
Esempio

La sintassi di SQL

Un comando SQL si chiama query (interrogazione) e termina con il punto e virgola ;. Le parole chiave (SELECT, FROM, WHERE...) non sono case-sensitive, ma per convenzione si scrivono in MAIUSCOLO per distinguerle dai nomi di tabelle e colonne.

ComandoA cosa serve
SELECTLegge dati
INSERTAggiunge righe
UPDATEModifica righe
DELETECancella righe
CREATE / ALTER / DROPGestisce le tabelle
Esempio

Leggere i dati: SELECT

SELECT è il comando più usato: seleziona le colonne da una tabella. L'asterisco * indica “tutte le colonne”. Per scegliere colonne specifiche le elenchi separate da virgola.

Esempio

Valori unici: SELECT DISTINCT

SELECT DISTINCT restituisce solo i valori diversi, eliminando i duplicati. Utile, ad esempio, per sapere quali classi o città compaiono nella tabella.

Esempio

Filtrare le righe: WHERE

La clausola WHERE filtra le righe in base a una condizione: vengono restituite solo quelle che la soddisfano.

Esempio

Gli operatori di confronto

Nel WHERE puoi usare operatori di confronto per costruire le condizioni.

OperatoreSignificato
=Uguale
<> o !=Diverso
> <Maggiore / minore
>= <=Maggiore-uguale / minore-uguale
Esempio

AND, OR e NOT

Puoi combinare più condizioni con AND (tutte vere), OR (almeno una vera) e NOT (negazione). Usa le parentesi per controllare la priorità.

Esempio

Ordinare i risultati: ORDER BY

ORDER BY ordina le righe in base a una o più colonne. ASC è crescente (predefinito), DESC decrescente.

Esempio

Inserire dati: INSERT INTO

INSERT INTO aggiunge una nuova riga. Si specificano le colonne e poi i valori corrispondenti con VALUES.

Esempio

I valori NULL

NULL rappresenta un valore mancante o sconosciuto, diverso da 0 o dalla stringa vuota. Per testarlo si usa IS NULL o IS NOT NULL (mai = NULL).

Esempio

Modificare dati: UPDATE

UPDATE modifica righe esistenti. Usa sempre WHERE: senza, modifichi tutte le righe della tabella!

Esempio

Cancellare dati: DELETE

DELETE elimina righe. Anche qui il WHERE è fondamentale per non svuotare l'intera tabella.

Esempio

Limitare i risultati: LIMIT

LIMIT restituisce solo un numero massimo di righe. È utile per le “top N” o per la paginazione. (In SQL Server si usa TOP, in Oracle ROWNUM.)

Esempio

MIN e MAX

Le funzioni MIN() e MAX() restituiscono il valore minimo e massimo di una colonna.

Esempio

COUNT, AVG e SUM

Le funzioni di aggregazione calcolano un valore su più righe: COUNT() conta, AVG() fa la media, SUM() somma.

Esempio

Ricerche con LIKE

LIKE cerca un pattern nel testo usando i caratteri jolly: % (qualsiasi sequenza) e _ (un singolo carattere).

Esempio

L'operatore IN

IN verifica se un valore è presente in un elenco, in modo più compatto rispetto a tanti OR.

Esempio

L'operatore BETWEEN

BETWEEN seleziona i valori in un intervallo (estremi inclusi). Funziona con numeri, testo e date.

Esempio

Gli alias (AS)

Gli alias assegnano un nome temporaneo a una colonna o a una tabella con AS, rendendo i risultati più leggibili.

Esempio

Unire le tabelle: JOIN

Il JOIN combina righe di due o più tabelle collegate da una colonna comune (di solito una chiave). Nel nostro database, studenti.classe_id punta a classi.id.

📊 Tabella classi: id, aula, classe. Es. (1, 'A12', '3A'), (2, 'B05', '3B').
Esempio

INNER JOIN

L'INNER JOIN (il JOIN “standard”) restituisce solo le righe che hanno corrispondenza in entrambe le tabelle. Gli studenti senza una classe collegata vengono esclusi.

Esempio

LEFT JOIN

Il LEFT JOIN restituisce tutte le righe della tabella di sinistra, anche quelle senza corrispondenza a destra (riempite con NULL). Esistono anche RIGHT JOIN e FULL JOIN.

Esempio

UNION

UNION unisce i risultati di due SELECT (con lo stesso numero di colonne), eliminando i duplicati. UNION ALL li mantiene.

Esempio

Raggruppare: GROUP BY

GROUP BY raggruppa le righe con lo stesso valore e permette di calcolare aggregati per gruppo (ad esempio la media voti per classe).

Esempio

Filtrare i gruppi: HAVING

HAVING filtra i gruppi creati da GROUP BY (mentre WHERE filtra le righe prima del raggruppamento). Serve per condizioni sugli aggregati.

Esempio

Le subquery (query annidate)

Una subquery è una query dentro un'altra query. Si usa, ad esempio, per confrontare un valore con un risultato calcolato (come la media generale).

Esempio

Creare una tabella: CREATE TABLE

CREATE TABLE definisce una nuova tabella, le sue colonne e i tipi di dato (INTEGER, TEXT, REAL, VARCHAR, DATE...).

Esempio

I vincoli (Constraints)

I vincoli impongono regole sui dati di una colonna, garantendone l'integrità.

VincoloSignificato
PRIMARY KEYIdentificatore univoco della riga
NOT NULLIl valore è obbligatorio
UNIQUENessun duplicato
DEFAULTValore predefinito
FOREIGN KEYCollega a un'altra tabella
Esempio

Modificare una tabella: ALTER TABLE

ALTER TABLE cambia la struttura di una tabella esistente, ad esempio aggiungendo una colonna.

Esempio

Eliminare una tabella: DROP TABLE

DROP TABLE elimina definitivamente una tabella e tutti i suoi dati. TRUNCATE invece svuota la tabella mantenendone la struttura. Attenzione: sono operazioni irreversibili!

Esempio

Le viste (VIEW)

Una vista è una “tabella virtuale” basata sul risultato di una query. Si crea con CREATE VIEW e si interroga come una normale tabella: utile per semplificare query complesse e riutilizzarle.

Esempio

Gli indici (INDEX)

Un indice velocizza le ricerche su una colonna, un po' come l'indice analitico di un libro. Si crea con CREATE INDEX. Migliora le SELECT ma rallenta leggermente gli inserimenti: vanno usati con criterio sulle colonne più cercate.

Esempio

SQL Funzioni di aggregazione

Le funzioni di aggregazione calcolano un singolo valore a partire da un insieme di righe: COUNT(), SUM(), AVG(), MIN() e MAX(). Sono la base dei report e delle statistiche su un database.

Esempio

SQL Wildcards (caratteri jolly)

I wildcards si usano con LIKE per cercare per corrispondenza parziale. Il % sostituisce qualsiasi sequenza di caratteri, l'_ un singolo carattere.

PatternTrova
'A%'Tutto ciò che inizia per A
'%a'Tutto ciò che finisce per a
'%ar%'Contiene "ar"
'_a%'Seconda lettera "a"
Esempio

SQL RIGHT JOIN

Il RIGHT JOIN restituisce tutte le righe della tabella di destra e le corrispondenze da quella di sinistra; dove non c'è corrispondenza, i campi di sinistra sono NULL. È lo specchio del LEFT JOIN.

SELECT studenti.nome, classi.aula
FROM studenti
RIGHT JOIN classi ON studenti.classe_id = classi.id;
💡 SQLite (usato dall'editor di questo corso) non supporta direttamente RIGHT JOIN: si ottiene lo stesso risultato invertendo le tabelle con un LEFT JOIN.

SQL FULL JOIN (FULL OUTER JOIN)

Il FULL OUTER JOIN restituisce tutte le righe di entrambe le tabelle: quando non c'è corrispondenza, i campi mancanti sono NULL. Unisce i risultati di LEFT e RIGHT JOIN.

SELECT studenti.nome, classi.aula
FROM studenti
FULL OUTER JOIN classi ON studenti.classe_id = classi.id;

SQL SELF JOIN

Un SELF JOIN è una tabella unita a sé stessa, usando gli alias per distinguerne le due copie. Utile, ad esempio, per confrontare righe della stessa tabella (studenti della stessa città).

SELECT a.nome AS studente1, b.nome AS studente2, a.citta
FROM studenti a, studenti b
WHERE a.citta = b.citta AND a.id < b.id;

SQL EXISTS

L'operatore EXISTS verifica se una subquery restituisce almeno una riga. Restituisce vero o falso e si usa spesso per controllare l'esistenza di dati collegati.

SELECT nome FROM classi c
WHERE EXISTS (
  SELECT 1 FROM studenti s WHERE s.classe_id = c.id
);

SQL ANY e ALL

Gli operatori ANY e ALL confrontano un valore con i risultati di una subquery. ANY è vero se almeno un confronto è vero; ALL è vero se lo sono tutti.

-- studenti con voto maggiore di ALMENO uno della 3A
SELECT nome FROM studenti
WHERE voto > ANY (SELECT voto FROM studenti WHERE classe = '3A');

SQL SELECT INTO

SELECT INTO copia i dati di una tabella in una nuova tabella. Utile per creare backup o tabelle temporanee di lavoro.

SELECT * INTO studenti_backup
FROM studenti;

-- solo alcune colonne e righe
SELECT nome, voto INTO promossi
FROM studenti WHERE voto >= 6;

SQL INSERT INTO SELECT

INSERT INTO SELECT copia righe da una tabella a un'altra già esistente. A differenza di SELECT INTO, la tabella di destinazione deve esistere.

INSERT INTO promossi (nome, voto)
SELECT nome, voto FROM studenti
WHERE voto >= 6;

SQL CASE

L'espressione CASE è l'equivalente dell'if/else in SQL: restituisce valori diversi a seconda delle condizioni. Perfetta per creare colonne calcolate.

Esempio

SQL Funzioni per i NULL

Le funzioni per i valori NULL forniscono un valore alternativo quando un campo è vuoto. In SQLite/standard si usa COALESCE(); altri dialetti hanno IFNULL(), ISNULL() o NVL().

SELECT nome, COALESCE(citta, 'Città non indicata') AS citta
FROM studenti;

SQL Stored Procedures

Una stored procedure è un blocco di codice SQL salvato nel database e richiamabile per nome, anche con parametri. Riduce le ripetizioni e centralizza la logica sul server.

-- sintassi SQL Server
CREATE PROCEDURE StudentiPerClasse @classe VARCHAR(10)
AS
SELECT * FROM studenti WHERE classe = @classe;

-- richiamo
EXEC StudentiPerClasse @classe = '3A';
💡 La sintassi delle stored procedure cambia tra MySQL, SQL Server e PostgreSQL, ma il concetto è lo stesso: una procedura riutilizzabile salvata nel database.

SQL Commenti

I commenti documentano le query e non vengono eseguiti. Su una riga si usa --, su più righe /* ... */.

-- Questo è un commento su una riga
SELECT nome FROM studenti;  -- anche a fine riga

/* Questo commento
   occupa più righe */

SQL CREATE DATABASE

Il comando CREATE DATABASE crea un nuovo database vuoto, dentro al quale poi creerai le tabelle.

CREATE DATABASE scuola;

SQL DROP DATABASE

DROP DATABASE elimina definitivamente un intero database con tutti i suoi dati. Da usare con grande attenzione.

DROP DATABASE scuola;
⚠️ Operazione irreversibile: prima di eseguire un DROP fai sempre un backup.

SQL BACKUP DATABASE

Il backup salva una copia del database per poterlo ripristinare in caso di guasto o errore. La sintassi dipende dal sistema (qui SQL Server).

BACKUP DATABASE scuola
TO DISK = 'C:\backup\scuola.bak';

SQL NOT NULL

Il vincolo NOT NULL impone che una colonna abbia sempre un valore: non può restare vuota.

CREATE TABLE studenti (
  id INTEGER PRIMARY KEY,
  nome TEXT NOT NULL,
  voto INTEGER
);

SQL UNIQUE

Il vincolo UNIQUE garantisce che tutti i valori di una colonna siano diversi tra loro (ad esempio una email o una matricola).

CREATE TABLE studenti (
  id INTEGER PRIMARY KEY,
  matricola TEXT UNIQUE,
  nome TEXT NOT NULL
);

SQL PRIMARY KEY

La chiave primaria identifica in modo univoco ogni riga di una tabella. È UNIQUE e NOT NULL insieme, e ogni tabella dovrebbe averne una.

CREATE TABLE studenti (
  id INTEGER PRIMARY KEY,
  nome TEXT NOT NULL
);

SQL FOREIGN KEY

La chiave esterna collega una tabella a un'altra, garantendo l'integrità dei dati: il valore deve esistere nella tabella collegata. È la base delle relazioni tra tabelle.

CREATE TABLE studenti (
  id INTEGER PRIMARY KEY,
  nome TEXT,
  classe_id INTEGER,
  FOREIGN KEY (classe_id) REFERENCES classi(id)
);
💡 La chiave esterna (FOREIGN KEY) punta alla chiave primaria (PRIMARY KEY) di un'altra tabella: è il “ponte” che lega i dati nel modello relazionale.

SQL CHECK

Il vincolo CHECK impone una condizione sui valori ammessi in una colonna (ad esempio un voto tra 1 e 10).

CREATE TABLE studenti (
  id INTEGER PRIMARY KEY,
  nome TEXT,
  voto INTEGER CHECK (voto >= 1 AND voto <= 10)
);

SQL DEFAULT

Il vincolo DEFAULT assegna un valore predefinito a una colonna quando non se ne specifica uno durante l'inserimento.

CREATE TABLE studenti (
  id INTEGER PRIMARY KEY,
  nome TEXT,
  citta TEXT DEFAULT 'Roma'
);

SQL AUTO INCREMENT

L'auto increment genera automaticamente un numero progressivo per ogni nuova riga, perfetto per le chiavi primarie. In SQLite si ottiene con INTEGER PRIMARY KEY AUTOINCREMENT, in MySQL con AUTO_INCREMENT.

-- MySQL
CREATE TABLE studenti (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nome VARCHAR(50)
);

SQL Date

SQL gestisce date e orari con tipi come DATE, TIME e DATETIME. Attenzione al formato: confrontare date richiede di usare lo standard 'AAAA-MM-GG'.

SELECT * FROM ordini
WHERE data_ordine >= '2026-01-01'
  AND data_ordine < '2026-02-01';

SQL Injection (sicurezza)

La SQL Injection è una delle vulnerabilità più pericolose: un attaccante inserisce codice SQL malevolo nei campi di input per leggere o distruggere dati. Mai costruire query concatenando direttamente l'input dell'utente!

-- ❌ PERICOLOSO: input concatenato
"SELECT * FROM utenti WHERE nome = '" + input + "'"
-- se input = ' OR '1'='1  l'attaccante entra senza password
⭐ La difesa è usare le query parametrizzate (prepared statements): l'input viene trattato come dato, mai come codice. Vedi la sezione successiva.

SQL Prepared Statements e parametri

I prepared statements (query parametrizzate) separano il codice SQL dai dati usando dei segnaposto (? o :nome). È il modo corretto e sicuro per inserire l'input dell'utente, e previene la SQL Injection.

-- il ? è un parametro: il valore viene passato a parte, in sicurezza
SELECT * FROM utenti WHERE nome = ? AND password = ?;
💡 In PHP, Python, Java ecc. il valore reale dei parametri si passa con una funzione apposita (es. bindParam, execute([...])), non concatenandolo nella stringa.

SQL Hosting

Per usare un database in un sito web reale serve un server di database in hosting. I sistemi più diffusi sono MySQL/MariaDB, PostgreSQL, SQL Server e Oracle; molti hosting includono MySQL con il pannello phpMyAdmin.

💡 Per imparare e fare esercizi non serve alcun hosting: in questo corso esegui SQL direttamente nel browser con SQLite. Approfondisci con il corso MySQL.

Esempi SQL pronti da copiare

Il modo migliore per imparare SQL è partire da query già funzionanti: copiale, aprile nell'editor “Provalo tu” ed eseguile sul database di esempio. Ogni esempio di questo corso è anche un piccolo esercizio.

Classifica per media voto

Editor SQL online (Provalo tu)

Su questo corso hai un editor SQL online gratuito integrato, basato su SQLite: esegui query reali direttamente nel browser, senza installare nulla. Ogni esempio ha il pulsante “Provalo tu ▶”.

  1. Clicca “Provalo tu” su un esempio.
  2. Modifica la query SQL nell'editor.
  3. Premi ▶ Esegui e guarda subito la tabella dei risultati.

Quiz SQL — metti alla prova le tue conoscenze

Un breve quiz di SQL per autovalutarti. Pensa alla risposta e poi apri la soluzione.

1. Quale comando estrae dati da una tabella?

SELECT.

2. Quale clausola filtra le righe?

WHERE. Per filtrare dopo un raggruppamento si usa HAVING.

3. Quale JOIN restituisce tutte le righe di sinistra anche senza corrispondenza?

✅ Il LEFT JOIN.

4. Come si contano le righe di una tabella?

✅ Con SELECT COUNT(*) FROM tabella;

5. Quale vincolo collega due tabelle?

✅ La FOREIGN KEY (chiave esterna).

Esercizi SQL con soluzioni (per principianti)

Questi esercizi di SQL svolti sono pensati per chi vuole fare pratica con query reali. Per ognuno c'è la consegna e la soluzione commentata: provala nell'editor sul database di esempio (tabelle studenti e classi). Sono gli stessi esercizi di SQL che assegno ai miei studenti durante le ripetizioni a Roma.

Esercizio 1 — Tutti i nomi Base

Estrai solo il nome e il voto di tutti gli studenti.

Mostra soluzione
SELECT nome, voto FROM studenti;

Esercizio 2 — Solo i promossi Base

Mostra gli studenti con voto maggiore o uguale a 6, ordinati dal voto più alto.

Mostra soluzione
SELECT nome, voto FROM studenti
WHERE voto >= 6
ORDER BY voto DESC;

Esercizio 3 — Media per classe Medio

Calcola la media dei voti per ogni classe.

Mostra soluzione
SELECT classe, AVG(voto) AS media
FROM studenti
GROUP BY classe;

Esercizio 4 — Studenti e aula Medio

Mostra il nome di ogni studente insieme all'aula della sua classe (JOIN tra studenti e classi).

Mostra soluzione
SELECT s.nome, c.aula
FROM studenti s
JOIN classi c ON s.classe_id = c.id;

Esercizio 5 — Classi numerose Avanzato

Trova le classi che hanno più di 1 studente, mostrando quanti sono.

Mostra soluzione
SELECT classe, COUNT(*) AS numero
FROM studenti
GROUP BY classe
HAVING COUNT(*) > 1;
⭐ Esegui ogni soluzione nell'editor “Provalo tu” e modificala: cambiare le condizioni è il modo migliore per capire come funziona SQL.

Sfide SQL — esercizi avanzati senza soluzione

Le sfide SQL sono esercizi più impegnativi, senza soluzione data: l'obiettivo è ragionare e costruire da soli.

🎯 Sfida 1 — Biblioteca

Progetta un database per una biblioteca (libri, autori, prestiti) con le giuste chiavi esterne e scrivi le query per sapere quali libri sono in prestito.

🎯 Sfida 2 — Top studenti

Scrivi una query che mostri, per ogni classe, solo lo studente con il voto più alto.

🎯 Sfida 3 — Report con CASE

Crea un report che classifichi ogni studente come "Ottimo", "Sufficiente" o "Insufficiente" e conti quanti studenti ci sono in ogni categoria.

Programma del corso SQL (syllabus)

Questo è il programma completo del corso di SQL, l'elenco ordinato degli argomenti dal principiante all'avanzato. È lo stesso syllabus che seguo in classe e nelle ripetizioni.

  1. Interrogazioni: SELECT, DISTINCT, WHERE, ORDER BY, operatori.
  2. Modifica dati: INSERT, UPDATE, DELETE, valori NULL.
  3. Aggregazione: COUNT, SUM, AVG, MIN, MAX, GROUP BY, HAVING.
  4. Più tabelle: JOIN (inner, left, right, full, self), UNION, subquery.
  5. Struttura: CREATE, ALTER, DROP, vincoli, chiavi, indici, viste.
  6. Sicurezza e pratica: SQL Injection, prepared statements, esercizi.

Piano di studio SQL

Quanto ci vuole per imparare SQL? Le basi in una settimana. Ecco un piano di studio realistico studiando circa un'ora al giorno.

GiornoCosa studiare
1–2SELECT, WHERE, ORDER BY, operatori
3INSERT, UPDATE, DELETE, NULL
4Funzioni di aggregazione, GROUP BY, HAVING
5JOIN e subquery
6CREATE TABLE, vincoli, chiavi, indici
7Viste, sicurezza, esercizi e sfide

Preparazione al colloquio — domande SQL frequenti

Le domande di SQL più frequenti ai colloqui per ruoli da sviluppatore e data analyst. Utili anche per le interrogazioni a scuola.

Differenza tra WHERE e HAVING?

WHERE filtra le righe prima del raggruppamento; HAVING filtra i gruppi dopo GROUP BY.

Differenza tra INNER JOIN e LEFT JOIN?

INNER restituisce solo le righe con corrispondenza in entrambe le tabelle; LEFT include tutte quelle di sinistra anche senza corrispondenza.

Cos'è una chiave primaria e una esterna?

La primaria identifica univocamente una riga; l'esterna collega una tabella alla chiave primaria di un'altra.

Cos'è la SQL Injection e come si previene?

È l'iniezione di codice SQL malevolo tramite l'input. Si previene con le query parametrizzate (prepared statements).

Bootcamp SQL — percorso intensivo

Un bootcamp SQL condensa la teoria nella pratica continua. Per imparare velocemente, alterna ogni argomento con una query da scrivere subito:

  • Studia un comando (max 20 minuti).
  • Esegui l'esempio nell'editor “Provalo tu”.
  • Risolvi un esercizio collegato senza guardare la soluzione.
  • Ripeti con il comando successivo.
💡 Vuoi un bootcamp SQL seguito di persona a Roma? Con le ripetizioni in presenza costruiamo insieme un percorso su misura, dalla prima SELECT al database completo.

Riferimento — Tipi di dato SQL

TipoContiene
INTEGER / INTNumeri interi
DECIMAL / FLOATNumeri con decimali
VARCHAR(n) / TEXTTesto
DATE / DATETIMEDate e orari
BOOLEANVero / falso

Riferimento — Parole chiave SQL

Parola chiaveUso
SELECTEstrae dati
INSERT / UPDATE / DELETEInserisce / modifica / elimina righe
WHERE / ORDER BYFiltra / ordina
GROUP BY / HAVINGRaggruppa / filtra i gruppi
JOINUnisce tabelle
CREATE / ALTER / DROPGestisce la struttura

Riferimento — Funzioni SQL

FunzioneCosa fa
COUNT()Conta le righe
SUM() / AVG()Somma / media
MIN() / MAX()Minimo / massimo
UPPER() / LOWER()Maiuscolo / minuscolo
ROUND()Arrotonda un numero
COALESCE()Primo valore non NULL

Riferimento — Quick Reference SQL

Lo schema riassuntivo delle clausole di una query, nell'ordine in cui si scrivono:

SELECT   colonne
FROM     tabella
JOIN     altra_tabella ON condizione
WHERE    condizione
GROUP BY colonna
HAVING   condizione_sul_gruppo
ORDER BY colonna
LIMIT    n;
💡 L'ordine di scrittura è questo, ma l'ordine logico di esecuzione parte da FROM, poi WHERE, GROUP BY, HAVING, SELECT e infine ORDER BY.

Certificato SQL

Vuoi una certificazione di SQL da mostrare nel CV? Al termine di questo corso hai le competenze per affrontare i test di certificazione online più diffusi e, soprattutto, per interrogare e progettare database reali.

Se sei un mio studente, posso rilasciarti un attestato di partecipazione al percorso di SQL svolto durante le ripetizioni in presenza a Roma, con l'elenco degli argomenti e dei progetti realizzati.

⭐ Il vero “certificato” è saper risolvere un problema reale: un database ben progettato vale più di qualsiasi attestato.

Conclusione

Complimenti! 🎉 Hai completato il corso di SQL completo e gratuito in italiano: dalle interrogazioni (SELECT, WHERE, ORDER BY) all'aggregazione (COUNT, AVG, GROUP BY, HAVING), dai JOIN alle subquery, dalla gestione del database (CREATE, vincoli, chiavi, indici, viste) fino a sicurezza, esercizi, sfide e riferimenti. Ora sai interrogare e progettare un database relazionale.

Il segreto per padroneggiare SQL è esercitarsi con query reali: rifai gli esercizi SQL, affronta le sfide e prova a progettare un piccolo database da zero.

E ora?

Il prossimo passo è mettere in pratica SQL su un vero gestore di database con il corso MySQL. Se vuoi un percorso guidato passo passo o aiuto per una verifica, posso seguirti con le ripetizioni di informatica in presenza a Roma.

🎯 La tua sfida finale

Progetta un piccolo database per una biblioteca (libri, autori, prestiti) e scrivi le query per sapere quali libri sono in prestito e chi ha restituito in ritardo.

✏️ Provalo tu — scrivi ed esegui SQL
Anteprima