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

Query SQL da usare davvero nella vita reale

Imparate le query SQL essenziali su cui gli analisti di dati, i marketer e i team di prodotto fanno affidamento ogni giorno, con esempi semplici e comprensibili.

Quando si è alle prime armi con l'SQL, è facile essere sopraffatti dalla sintassi e dalla teoria. Ma la verità è che la maggior parte dei professionisti, che si tratti di analisti di dati, marketer o product manager, utilizza una piccola serie di query SQL in continuazione per svolgere il proprio lavoro. Non è necessario imparare tutto in una volta.

Questo articolo illustra le query SQL essenziali che i principianti utilizzano sul lavoro. Niente dati astratti o matematica complicata: solo esempi chiari e facili da capire e da applicare subito.

Immaginiamo di lavorare con il database di una libreria online. Volete analizzare le tabelle degli ordini e dei clienti per rispondere a domande di lavoro quotidiane.

Per imparare l'SQL passo dopo passo, con esercizi pratici ed esempi reali, visitate il nostro corsoSQL per principianti . È tutto ciò di cui avete bisogno per costruire una solida base. Il corso comprende 129 esercizi interattivi, tutti incentrati sull'apprendimento pratico. Scriverete codice SQL reale fin dall'inizio, riceverete un feedback immediato e acquisirete la sicurezza necessaria per utilizzare SQL nel vostro lavoro quotidiano.

Iniziamo con le query!

1. Guardate un campione di dati

La prima query che si esegue in quasi tutti i database è una rapida occhiata ai dati stessi. Si vuole vedere con che tipo di informazioni si sta lavorando.

SELECT * 
FROM orders
LIMIT 10;

Questa query seleziona tutte le colonne ma mostra solo le prime 10 righe. Dà una rapida occhiata alla struttura della tabella, comprese le colonne orders comprese le colonne order_id, customer_id, order_date e total_amount. È un modo semplice per familiarizzare con il set di dati prima di iniziare l'analisi. È importante non selezionare tutte le righe della tabella, soprattutto nel caso di grandi insiemi di dati, perché ciò potrebbe sovraccaricare il database. Selezionare solo 10 o 20 righe è un modo sicuro per visualizzare l'anteprima dei dati.

2. Conoscere le dimensioni della tabella

La prossima query che si esegue di solito è per scoprire quante righe ci sono in una tabella:

SELECT COUNT(*) 
FROM orders;

Questo indica quanti ordini ha in totale la vostra azienda. È una buona idea eseguire questa query per tutte le tabelle con cui si intende lavorare, in modo da sapere quanto è grande ciascuna di esse prima di immergersi nell'analisi.

3. Vedere tutti i valori unici in una colonna

Successivamente, è necessario controllare tutti i valori univoci di una colonna, soprattutto per le colonne "dizionario" come i nomi delle città, le categorie di prodotti o i metodi di pagamento. Si tratta di colonne in cui ogni valore rappresenta un'etichetta, un tipo o una categoria, e capire cosa c'è dentro aiuta a prendere decisioni migliori durante l'analisi.

Ad esempio, per vedere tutti i diversi metodi di pagamento utilizzati:

SELECT DISTINCT payment_method 
FROM orders;

La parola chiave DISTINCT rimuove i duplicati dai risultati. Invece di mostrare il valore di ogni riga, restituisce ogni valore unico solo una volta. Quindi, se "carta_di_credito" compare 5.000 volte nella tabella, apparirà solo una volta nel risultato.

Questo è utile quando si vuole:

  • Controllare l'elenco completo delle opzioni disponibili in una colonna.
  • Capire come vengono classificati i valori.
  • Prepararsi a filtrare, raggruppare o pulire i dati.

È possibile utilizzare DISTINCT con qualsiasi colonna per esplorare rapidamente la varietà di valori in essa contenuti.

4. Contare la frequenza di comparsa di ciascun valore

Questa è una delle query più utilizzate nella vita reale. Aiuta a vedere la distribuzione dei valori in una colonna, soprattutto nelle colonne "dizionario" come payment_method, category, o city.

Supponiamo di voler sapere quanti ordini sono stati effettuati con ogni metodo di pagamento:

SELECT payment_method, COUNT(*) AS num_orders
FROM orders
GROUP BY payment_method;

Questa query raggruppa le righe per payment_method e poi conta quante righe (cioè gli ordini) rientrano in ciascun gruppo. Il risultato mostra ogni metodo di pagamento e il numero di ordini che lo hanno utilizzato.

Questo schema può essere utilizzato ogni volta che si desidera suddividere i dati per categoria, ad esempio per vedere quanti ordini provengono da ciascuna città o quanti prodotti rientrano in ciascuna categoria.

Per facilitare la lettura dei risultati, è possibile ordinarli per frequenza (dal più alto al più basso):

SELECT payment_method, COUNT(*) AS num_orders
FROM orders
GROUP BY payment_method
ORDER BY COUNT(*) DESC;

In questo modo è possibile vedere rapidamente quali sono i valori più comuni.

5. Trovare i valori minimi, massimi e medi

Successivamente, è necessario visualizzare l'intervallo di valori in una colonna numerica. Questo aiuta a comprendere aspetti come la dimensione dell'ordine, il prezzo o la quantità.

Ad esempio, per verificare l'importo minimo, massimo e medio di un ordine:

SELECT 
  MIN(total_amount) AS smallest_order,
  MAX(total_amount) AS biggest_order,
  AVG(total_amount) AS average_order
FROM orders;

Questa query utilizza tre funzioni aggregate:

  • MIN trova il valore più piccolo.
  • MAX trova il valore più grande
  • AVG calcola la media.

In questo modo si ottiene una rapida panoramica della diffusione dei valori nella colonna total_amount, utile per individuare i valori anomali o impostare le soglie per ulteriori analisi.

Bonus: è possibile suddividere l'intervallo per categoria utilizzando GROUP BY. Ad esempio, per visualizzare l'importo minimo, massimo e medio degli ordini in base al metodo di pagamento:

SELECT  
  payment_method,  
  MIN(total_amount) AS smallest_order,  
  MAX(total_amount) AS biggest_order,  
  AVG(total_amount) AS average_order  
FROM orders  
GROUP BY payment_method;

In questo modo è possibile confrontare l'andamento delle diverse categorie, ad esempio quale metodo di pagamento tende ad avere importi d'ordine più alti o più bassi.

6. Filtrare le righe con WHERE

A volte non serve l'intera tabella, ma solo le righe che soddisfano condizioni specifiche.

Ad esempio, per vedere solo gli ordini superiori a 100 dollari:

SELECT *
FROM orders
WHERE total_amount > 100;

In questo modo ci si concentra sugli ordini di valore elevato, per individuare chi spende molto o per identificare potenziali clienti VIP.

È anche possibile combinare più condizioni utilizzando AND:

SELECT *
FROM orders
WHERE total_amount > 100
  AND payment_method = 'credit_card';

Ora state filtrando i clienti che hanno speso più di 100 dollari e che hanno pagato con una carta di credito: forse questi sono i vostri utenti più preziosi.

Il filtro con WHERE è una delle cose più utili che si possano fare in SQL. Vi aiuta a rispondere a domande commerciali mirate, come ad esempio:

  • Chi ha fatto grandi acquisti?
  • Chi ha utilizzato un metodo di pagamento specifico?
  • Quali ordini sono stati effettuati dopo una certa data?

È possibile utilizzare anche OR, IN, NOT e altri operatori per personalizzare ulteriormente i filtri, ma WHERE è il punto di partenza per qualsiasi approfondimento dei dati.

7. Ordinare i dati con ORDER BY

Volete vedere prima gli ordini di valore più elevato? È possibile ordinare i risultati con ORDER BY e controllare la direzione con DESC (per la discesa) o ASC (per la salita):

SELECT *  
FROM orders  
ORDER BY total_amount DESC  
LIMIT 10;

Questo mostra i 10 ordini più importanti mai effettuati, ordinati dal più alto al più basso in base a total_amount.

Questo tipo di query è ideale per tutti i tipi di ordinamento, come ad esempio:

  • Trovare i risultati superiori o inferiori in base a qualsiasi colonna.
  • Classificare gli articoli in base alle vendite, alla quantità o alle prestazioni.
  • Individuare le tendenze ordinando i dati nel tempo.
  • Evidenziare valori anomali o insoliti.

Se invece si desidera visualizzare gli ordini più piccoli, basta cambiare DESC in ASC:

…
ORDER BY total_amount ASC

Suggerimento: è possibile ordinare per qualsiasi colonna, non solo per i numeri. Ad esempio, l'ordinamento per order_date mostra gli ordini più recenti o più vecchi, a seconda della direzione dell'ordinamento.

8. Combinare le tabelle con JOIN

Una delle query più comuni che si utilizzano nella vita reale è una JOIN. Questo perché le informazioni utili sono spesso distribuite su più tabelle. È sempre necessario combinarle per ottenere un quadro completo.

Ad esempio, la tabella ordini memorizza solo customer_id, non il nome effettivo del cliente. Per vedere ogni ordine insieme al nome della persona che l'ha effettuato, è necessario unirlo alla tabella customers:

SELECT  
  o.order_id,  
  c.customer_name,  
  o.total_amount,  
  o.order_date  
FROM orders o  
JOIN customers c ON o.customer_id = c.customer_id;

Questa query collega le due tabelle utilizzando la colonna customer_id, che esiste in entrambe. Utilizziamo gli alias delle tabelle (o per orders, c per customers) per rendere la query più facile da leggere.

Il risultato? Un set di dati molto più utile. Ora è possibile vedere chi ha effettuato ogni ordine, quanto ha speso e quando, il che è essenziale per l'analisi dei clienti, i rapporti e gli approfondimenti aziendali.

Le JOIN sono ovunque. Ogni volta che si lavora con database reali, si uniscono tabelle, che si tratti di ordini e clienti, prodotti e categorie o utenti e registri di attività.

9. Filtrare in base a un intervallo di date

Uno dei compiti più comuni nella vita reale è quello di filtrare i dati per un periodo di tempo specifico, ad esempio mostrando tutti gli ordini di un determinato mese o trimestre.

Supponiamo di voler vedere tutti gli ordini effettuati nel maggio 2024:

SELECT *  
FROM orders  
WHERE order_date >= '2025-05-01'  
  AND order_date < '2025-06-01';

Questo restituisce tutti gli ordini in cui order_date cade tra il 1° maggio e il 31 maggio 2025, incluso il 1° maggio e fino al 1° giugno (ma non incluso).

Il formato della data utilizzato è YYYY-MM-DD:

  • YYYY = anno a 4 cifre (ad es. 2024)
  • MM = mese a 2 cifre (ad es. 05 per maggio)
  • DD = giorno a 2 cifre (ad es. 01 per il 1° del mese)

L'uso di < '2024-06-01' invece di <= '2024-05-31' è più sicuro quando la colonna include valori temporali, come '2024-05-31 15:42:00', perché evita di escludere accidentalmente i dati dell'ultimo giorno.

Suggerimento finale: Esercitarsi su dati realistici

Il modo migliore per ricordare queste query è usarle. Esercitatevi con dati che hanno senso per voi, come gli ordini dei clienti, il traffico del blog o l'utilizzo dell'app. L'SQL non deve essere per forza opprimente. Non sono necessarie centinaia di comandi per svolgere un lavoro reale, ma solo un piccolo insieme di query pratiche su cui fare affidamento ogni giorno.

Per acquisire sicurezza e memoria muscolare, provate il corsoSQL per principianti su LearnSQL.it. Vi permette di fare pratica con set di dati realistici e 129 esercizi interattivi, in modo da imparare scrivendo l'SQL vero e proprio, non solo leggendolo.

Iniziate con le nozioni di base di cui sopra e sarete sorpresi di quanto possano portarvi lontano.