Pratico SQL

Esercizi SQL corretti: da principiante ad avanzato

Un metodo di allenamento e tre esercizi spiegati per progredire senza trasformare la correzione in un semplice copia e incolla.

Team SQL.tn15min
Corso progressivo di esercizi SQL con editor, indici, validazione e risultato finale

Come si riconosce un buon esercizio corretto SQL?

Un buon esercizio non richiede solo la scrittura della sintassi. Presenta una domanda aziendale, descrive le tabelle disponibili e specifica il risultato atteso. La correzione spiega poi il ragionamento, i controlli e le possibili alternative.

Il validatore deve confrontare il risultato ottenuto, non solo il testo della query. Due soluzioni diverse possono essere corrette se restituiscono le colonne, le righe e i calcoli esatti corretti.

  • Contesto che spiega perché la risposta è utile.
  • Dati abbastanza ricchi da rivelare errori logici.
  • Segnali progressivi che aiutano senza fornire immediatamente la soluzione.
  • Una correzione commentata e il controllo del risultato.

Il metodo in cinque fasi

Prima di lanciare l'editor, scrivi in poche parole l'ambito e la granularità prevista. Quindi crea la query per blocchi: origine, filtri, calcoli, raggruppamento e ordinamento. Esegui dopo ogni passaggio per isolare gli errori.

Se sei bloccato, chiedi prima un indizio concettuale. Visualizza la soluzione solo dopo un vero tentativo, quindi chiudila e riscrivi la query senza guardarla.

  • 1. Riformulare la domanda aziendale.
  • 2. Identificare le tabelle, le chiavi e le colonne necessarie.
  • 3. Prevedere la forma del risultato.
  • 4. Scrivere ed eseguire la query in più fasi.
  • 5. Confronta, correggi, quindi spiega la soluzione con parole tue.

Livello principiante: filtra senza perdere il senso degli affari

Domanda: mostra gli ordini pagati superiori a € 100, dal più recente al più vecchio. La tabella orders contiene order_id, ordered_at, status e amount.

Inizia selezionando solo le colonne utili. Quindi aggiungi entrambe le condizioni in WHERE, quindi ordina. La correzione seguente utilizza un operatore rigoroso: un ordine di esattamente 100 € non è incluso.

Correzione: ordini pagati superiori a 100 €
SELECT order_id, ordered_at, amount
FROM orders
WHERE status = 'paid'
  AND amount > 100
ORDER BY ordered_at DESC;
Controllo: nessuna linea deve avere uno stato diverso da paid né un importo inferiore o uguale a 100.

Livello intermedio: aggregato dopo uno join

Domanda: trova i cinque clienti che hanno generato le entrate più pagate. I nomi sono in customers e gli importi sono in orders.

Lo join collega gli ordini al cliente. WHERE esclude gli ordini non pagati prima dell'aggregazione. GROUP BY produce una riga per cliente, quindi LIMIT mantiene le prime cinque dopo l'ordinamento.

  • Anche il raggruppamento per customer_id distingue due persone con lo stesso nome.
  • Il filtro di stato viene applicato prima di SUM.
  • Uno join alle righe di comando richiederebbe un ulteriore controllo dei duplicati.
Correzione: cinque migliori clienti per fatturato
SELECT
  c.customer_id,
  c.full_name,
  SUM(o.amount) AS revenue
FROM customers AS c
INNER JOIN orders AS o
  ON o.customer_id = c.customer_id
WHERE o.status = 'paid'
GROUP BY c.customer_id, c.full_name
ORDER BY revenue DESC
LIMIT 5;

Livello avanzato: classificare senza eliminare i dettagli

Domanda: classifica ogni ordine pagato nella sua città, dal più alto al più basso. A differenza di GROUP BY, una funzione finestra mantiene ogni comando nel risultato.

DENSE_RANK assegna lo stesso grado a importi identici e non crea buchi dopo un pareggio. PARTITION BY city ricomincia la classifica per ogni città.

Correzione: classificazione degli ordini per città
SELECT
  order_id,
  city,
  amount,
  DENSE_RANK() OVER (
    PARTITION BY city
    ORDER BY amount DESC
  ) AS city_rank
FROM orders
WHERE status = 'paid'
ORDER BY city, city_rank, order_id;
Alternativa: ROW_NUMBER fornisce sempre un numero univoco. RANK lascia un buco dopo un pareggio. La scelta giusta dipende dalla regola aziendale.

Come utilizzare la correzione senza perdere l'apprendimento

Una correzione è utile quando spiega perché esiste ciascuna clausola e come controllare il risultato. Diventa controproducente se viene copiato prima di ogni tentativo o se impone una sola forma di interrogazione.

Dopo aver compreso una soluzione, modificare un vincolo: modificare la soglia, mantenere i clienti senza ordini o calcolare una classifica diversa. Questa variazione verifica che il ragionamento è trasferibile.

  • Indizio 1: identificare il concetto mancante.
  • Suggerimento 2: proporre la struttura della clausola.
  • Spiegazione: collegare la clausola all'esigenza aziendale.
  • Soluzione: mostra una query verificata e i suoi limiti.

Costruisci una progressione da principiante ad avanzato

La difficoltà non dovrebbe derivare da un’affermazione ambigua. Aumenta quando l'esercizio combina più decisioni: scegliere la giusta granularità, collegare più tabelle, gestire valori NULL, confrontare periodi o utilizzare una funzione finestra.

Una progressione coerente ritorna regolarmente alle nozioni precedenti in nuovi contesti. Evita dieci esercizi quasi identici in cui cambia solo il nome della tabella o il valore del filtro.

  • Principiante: lettura, filtri, ordinamento e calcoli semplici.
  • Intermedio: aggregazioni, join, CASE e sottoquery.
  • Avanzato: CTE, funzioni finestra, qualità dei dati e ottimizzazione.
  • Progetto: trasformare una richiesta commerciale in un'analisi controllata.

Diagnosticare gli errori anziché ricominciare da capo in modo casuale

Un errore di sintassi impedisce l'esecuzione; un errore logico restituisce un risultato falso. Inizia leggendo la riga riportata, quindi riduci la query al blocco più piccolo che funzioni. Per un errore di risultato, controllare il numero di record restituiti a ciascun join e l'ambito dei filtri.

Mantieni alcune query di controllo: numero di ordini, somma totale, valori di stato distinti e linee non corrispondenti. Permettono di verificare rapidamente un'analisi più complessa.

Scegli il tuo prossimo esercizio

Il catalogo SQL.tn ti consente di filtrare gli esercizi per livello e concetto. Se non sai da dove cominciare, il test di posizionamento ti consiglia un punto di partenza. Il corso Data Analyst organizza quindi la pratica attorno a indicatori e domande aziendali.

Continua con un esercizio collegato a questa guida