20 esercizi di SQL WHERE per principianti
Indice
- SQL WHERE Clause Essentials
- Esercitazioni su SQL WHERE con valori numerici
- Esercizi SQL WHERE con valori di testo
-
Esercizi di pratica WHERE con valori booleani
- Esercizio 9: Elenco di tutti i corsi che terminano con un esame finale
- Esercizio 10: Elencare tutti i corsi che non hanno un progetto finale
- Esercizio 11: Selezionare tutti gli studenti che hanno superato gli esami finali
- Esercizio 12: Selezionare gli studenti che non hanno superato gli esami finali
- Esercitazioni WHERE con valori NULL
- Uso di WHERE con condizioni di filtraggio multiple
- Query On con la pratica di SQL WHERE!
In SQL, la clausola WHERE filtra i dati in base a condizioni definite. Continuate a leggere per seguire 20 esercizi WHERE con spiegazioni e soluzioni adatte ai principianti.
In questo articolo rivedremo alcuni dei nostri esercizi WHERE di SQL. Inizieremo spiegando la sintassi di base, quindi esamineremo 20 esercizi per principianti tratti dai corsi SQL elencati di seguito. Questi esercizi coprono i principali usi della clausola WHERE e sono perfetti per esercitarsi con l'SQL. Troverete altre informazioni in questi corsi:
Ogni corso ha sezioni separate per i diversi argomenti di SQL e utilizza un database diverso per farvi fare pratica con l'SQL. La pratica rende perfetti ed è il modo migliore per migliorare le vostre competenze SQL a un nuovo livello.
Senza ulteriori indugi, iniziamo.
SQL WHERE Clause Essentials
La clausola SQL WHERE definisce le condizioni per filtrare i dati. In altre parole, consente di recuperare solo i dati che soddisfano criteri specifici. Includendo la clausola WHERE
nell'istruzione SELECT
, UPDATE
, DELETE
, o in un'altra istruzione SQL, è possibile restringere il set di dati in uscita per includere solo i dati rilevanti.
Il filtraggio dei dati è essenziale per una gestione e un'analisi efficiente dei dati. Consente di estrarre solo le informazioni necessarie da grandi insiemi di dati, riducendo il volume dei dati elaborati e migliorando le prestazioni delle query.
La clausola WHERE
utilizza diversi strumenti per confrontare e filtrare i dati, tra cui gli operatori di confronto, la corrispondenza dei pattern per confrontare i valori con pattern specifici e gli operatori logici per combinare più condizioni.
Nell'istruzione SELECT
, la clausola WHERE
viene inserita dopo le clausole SELECT
e FROM
:
SELECT id, name , age FROM persons WHERE age > 18; |
Rapido ripasso: La clausola SELECT
elenca le colonne da presentare nell'output e la clausola FROM
definisce la tabella da cui vengono interrogati i dati. La clausola WHERE
specifica la condizione del filtro. In questo caso, selezioniamo solo le persone la cui età è superiore a 18 anni. Per saperne di più su come scrivere la clausola WHERE in SQL, si veda qui.
Le sezioni seguenti contengono esercizi pratici di SQL WHERE
che riguardano le seguenti applicazioni:
- Filtrare valori numerici.
- Filtrare valori di testo.
- Filtrare i valori booleani.
- Filtrare i valori NULL.
- Combinazione di più condizioni.
Per avere accesso all'ambiente di pratica, ai database di esempio e a un numero ancora maggiore di esercitazioni su WHERE
, vi invito a iscrivervi al corso completo.
Esercitazioni su SQL WHERE con valori numerici
Gli esercizi di questa sezione provengono dal corso Pratica su SQL: Università. Ecco il diagramma del database universitario utilizzato nei seguenti esercizi:
È troppo breve per essere un titolo H2 a sé stante. Si consiglia di aggiungerlo alla clausola WHERE Essentials H2 se non si vuole che faccia parte dell'intestazione H2 Esercizi numerici.

Esercizio 1: Visualizzazione di informazioni per un docente specifico
Domanda: Visualizzare tutti i dati relativi al docente il cui ID è uguale a 8.
Soluzione:
SELECT * FROM lecturer WHERE id = 8; |
Spiegazione: Poiché vogliamo visualizzare tutti i dati di questo docente, selezioniamo tutte le colonne della tabella. lecturer
tabella. Questo si ottiene con SELECT * FROM lecturer
.
Siamo interessati ai dati relativi al docente con ID 8. Pertanto, lo specifichiamo come condizione nella clausola WHERE
: id = 8
.
Esercizio 2: Selezionare gli studenti con punteggio pari o superiore a 95
Domanda: Visualizzare l'ID dello studente, il voto finale e il voto in lettere per ogni corso in cui lo studente ha ottenuto un voto finale di 95 o superiore.
Soluzione:
SELECT student_id, final_grade, course_letter_grade FROM course_enrollment WHERE final_grade >= 95; |
Spiegazione: Si desidera visualizzare l'ID dello studente, il voto finale e il voto in lettere per ogni iscrizione al corso. Pertanto, selezioniamo solo queste colonne dalla course_enrollment
tabella.
Vogliamo visualizzare solo le righe di dati in cui il voto finale è uguale o superiore a 95. Per ottenere questo risultato, definiamo una condizione nella clausola WHERE
come final_grade >= 95
.
Esercizio 3: Selezionare tutti gli studenti tranne uno
Domanda: Visualizzare tutti i dati degli studenti con un ID diverso da 1.
Soluzione:
SELECT * FROM student WHERE id != 1; |
Spiegazione: Anche in questo caso vogliamo selezionare tutti i dati dalla student
quindi utilizziamo il segno dell'asterisco (*
) che indica tutte le colonne disponibili.
Poiché vogliamo visualizzare i dati di tutti gli studenti tranne quelli con l'ID 1, definiamo nella clausola WHERE
la condizione che l'ID non sia uguale a 1: id != 1
.
Esercizio 4: Elencare tutti i corsi di valore inferiore a 3 ECTS
Domanda: Mostrare tutti i corsi con meno di 3 punti ECTS. Visualizzare due colonne: title
e ects_points
.
Soluzione:
SELECT title, ects_points FROM course WHERE ects_points < 3; |
Spiegazione: Selezioniamo dalla tabella i titoli dei corsi e il loro valore in punti ECTS. course
tabella. Per visualizzare solo i corsi di valore inferiore a 3 punti ECTS, definiamo la condizione della clausola WHERE
come ects_points < 3
.
Esercizi SQL WHERE con valori di testo
Gli esercizi di questa sezione provengono dal corso Pratica su SQL: Store. Ecco il diagramma del database del negozio :

Esercizio 5: Trovare la descrizione di una categoria di prodotti
Domanda: Trovare la descrizione della categoria con il nome "Alcool".
Soluzione:
SELECT description FROM category WHERE name = 'Alcohol' ; |
Spiegazione: Vogliamo visualizzare la descrizione di una categoria di prodotti, quindi selezioniamo la colonna description
dalla tabella. category
tabella. Poiché siamo interessati alla descrizione della categoria alcolici, definiamo la condizione nella clausola WHERE
come name = 'Alcohol'
.
Si noti che in SQL i letterali di stringa ("Alcol") devono essere racchiusi tra apici singoli (').
Esercizio 6: Elencare tutti i clienti il cui indirizzo e-mail corrisponde allo schema
Domanda: Visualizzare tutti i dati dei clienti il cui indirizzo e-mail termina con '.com'.
Soluzione:
SELECT * FROM customer WHERE contact_email LIKE '%.com' ; |
Spiegazione: Selezioniamo tutti i clienti dalla tabella customer
tabella.
Vogliamo elencare solo i clienti il cui indirizzo e-mail termina con '.com'. Per ottenere questo risultato, utilizzeremo la corrispondenza dei modelli. Nella clausola WHERE
definiamo una condizione come contact_email LIKE '%.com'
. Nel pattern matching SQL, il segno %
indica una qualsiasi sequenza di caratteri.
L'operatore LIKE
viene utilizzato per confrontare l'operando di sinistra (di solito il valore della colonna) con l'operando di destra (lo schema da abbinare). Se il valore corrisponde allo schema, la condizione viene superata, altrimenti fallisce.
Per saperne di più sull'uso di LIKE in SQL, consultare il sito.
Esercizio 7: Trovare i dipendenti il cui cognome corrisponde allo schema
Domanda: Non si ricorda esattamente il cognome di un dipendente. Era Mixer, Fixer, Bixer o qualcos'altro? Visualizzare i dati di tutti i dipendenti il cui cognome inizia con una lettera ed è seguito da "ixer".
Soluzione:
SELECT * FROM employee WHERE last_name LIKE '_ixer' ; |
Spiegazione: Selezioniamo tutte le colonne della tabella employee
tabella.
Poiché vogliamo trovare i dipendenti il cui cognome termina con 'ixer', utilizziamo nuovamente la corrispondenza di pattern. Nella clausola WHERE
, definiamo la condizione come last_name LIKE '_ixer'
. Il segno _
indica un carattere.
Esercizio 8: Elencare tutti i prodotti il cui nome contiene un trattino
Domanda: Mostrare tutti i dati dei prodotti il cui nome contiene un trattino (-
).
Soluzione:
SELECT * FROM product WHERE product_name LIKE '%-%' ; |
Spiegazione: Selezioniamo tutte le colonne della tabella product
tabella. Nella clausola WHERE
, definiamo la condizione come product_name LIKE '%-%'
. Il segno %
indica una sequenza o un numero di caratteri qualsiasi.
Esercizi di pratica WHERE con valori booleani
Gli esercizi di questa sezione provengono dal corso Pratica su SQL: Università. Ecco il diagramma del database universitario:

Esercizio 9: Elenco di tutti i corsi che terminano con un esame finale
Domanda: Visualizzare tutti i dati dei corsi che prevedono un esame finale (colonna has_exam
). Si noti che la colonna has_exam memorizza valori booleani (true
o false
).
Soluzione:
SELECT * FROM course WHERE has_exam IS TRUE ; |
Spiegazione: Selezioniamo tutte le colonne della tabella course
tabella.
Poiché vogliamo elencare solo i corsi che terminano con un esame finale, definiamo la condizione WHERE
come has_exam IS TRUE
.
Esercizio 10: Elencare tutti i corsi che non hanno un progetto finale
Domanda: Mostrare tutti i dati dei corsi che non hanno un progetto finale (colonna has_project
). Si noti che la colonna has_project
memorizza valori booleani (true
o false
).
Soluzione:
SELECT * FROM course WHERE has_project IS FALSE ; |
Spiegazione: Anche in questo caso selezioniamo tutte le colonne della course
tabella. Questa volta, vogliamo elencare tutti i corsi che non hanno un progetto finale. Definiamo la condizione della clausola WHERE
come has_project IS FALSE
.
Esercizio 11: Selezionare tutti gli studenti che hanno superato gli esami finali
Domanda: Visualizzare gli ID di tutti gli studenti che hanno superato l'esame finale. Includere la colonna passed
nei risultati. Si noti che la colonna passed memorizza valori booleani (true
o false
).
Soluzione:
SELECT student_id, passed FROM course_enrollment WHERE passed IS TRUE ; |
Spiegazione: Si vuole visualizzare la colonna che contiene gli ID degli studenti e la colonna che contiene le informazioni sul superamento degli esami finali da parte degli studenti. Selezioniamo queste colonne dalla course_enrollment
dalla tabella.
Nella clausola WHERE
, definiamo la condizione passed IS TRUE
per filtrare solo gli studenti che hanno superato gli esami finali.
Esercizio 12: Selezionare gli studenti che non hanno superato gli esami finali
Domanda: Visualizzare gli ID e i voti finali di tutti gli studenti che non hanno superato l'esame finale. Ricordare che la colonna passed
memorizza valori booleani (true
o false
).
Soluzione:
SELECT student_id, final_grade FROM course_enrollment WHERE passed IS FALSE ; |
Spiegazione: Si vogliono visualizzare le colonne che contengono gli ID degli studenti e il voto finale. Selezioniamo queste colonne dalla course_enrollment
tabella. Nella clausola WHERE
, definiamo la condizione passata IS FALSE
per filtrare solo gli studenti che non hanno superato gli esami finali.
Esercitazioni WHERE con valori NULL
Gli esercizi di questa sezione provengono dal corso Pratica su SQL: Store. Ecco il diagramma del database del negozio:

Esercizio 13: Selezionare le categorie senza descrizione
Domanda: Visualizzare tutte le categorie prive di descrizione.
Soluzione:
SELECT * FROM category WHERE description IS NULL ; |
Spiegazione: Si selezionano tutte le colonne della tabella category
che contiene le categorie dei prodotti.
Poiché vogliamo elencare solo le categorie che non hanno alcuna descrizione, dobbiamo fornire la condizione WHERE
description IS NULL
; NULL
significa che non c'è alcun valore in quella colonna.
Ci si può chiedere perché si usa IS NULL
invece di = NULL
. È perché NULL sta per nessun valore; non possiamo verificare se il valore è uguale a NULL
perché non c'è alcun valore da confrontare. IS NULL ci permette di verificare se un valore è (o non è) presente.
Esercizio 14: Trovare tutti i clienti di un'azienda
Domanda: Visualizzare tutti i dati dei clienti il cui nome dell'azienda non è NULL.
Soluzione:
SELECT * FROM customer WHERE company_name IS NOT NULL ; |
Spiegazione: Selezioniamo tutte le colonne della tabella customer
della tabella. Poiché vogliamo elencare tutti i clienti associati a un'azienda, definiamo la condizione della clausola WHERE
come company_name IS NOT NULL
. Questo è abbastanza esplicito, perché è quello che diremmo in parole povere.
Esercizio 15: Trovare gli acquisti con un indirizzo sconosciuto
Domanda: Visualizzare l'ID dell'acquisto, l'ID del cliente e l'ID del dipendente per gli acquisti con un indirizzo di spedizione sconosciuto.
Soluzione:
SELECT purchase_id, customer_id, employee_id FROM purchase WHERE ship_address IS NULL ; |
Spiegazione: Vogliamo visualizzare l'ID acquisto, l'ID cliente e l'ID dipendente, quindi selezioniamo queste colonne dalla tabella. purchase
tabella.
Poi, vogliamo elencare solo gli acquisti con un indirizzo di spedizione sconosciuto, che equivale al valore NULL
. Quindi la condizione della clausola WHERE
è ship_address IS NULL
.
Esercizio 16: Elencare tutte le categorie di genitori
Domanda: Visualizzare i nomi di tutte le categorie genitore, ossia le categorie che non hanno alcuna categoria genitore.
Soluzione:
SELECT name FROM category WHERE parent_category_id IS NULL ; |
Spiegazione: Vogliamo visualizzare i nomi delle categorie, quindi selezioniamo la colonna nome dalla tabella delle categorie.
Per selezionare solo le categorie padre, definiamo la condizione WHERE come parent_category_id IS NULL. Questo segue l'istruzione che le categorie genitore sono quelle a cui non è stata assegnata alcuna categoria genitore.
Uso di WHERE con condizioni di filtraggio multiple
Gli esercizi di questa sezione provengono dal corso Pratica su SQL: Blog. Ecco il diagramma del database:

Esercizio 17: Selezionare tutti gli articoli di marzo 2020
Domanda: Visualizzare gli URL e i titoli di tutti gli articoli (colonne url
e title
) la cui data di pubblicazione è marzo 2020.
Soluzione:
SELECT url, title FROM article WHERE publication_date >= '2020-03-01' AND publication_date < '2020-04-01' ; |
Spiegazione: Vogliamo visualizzare gli URL e i titoli degli articoli, quindi selezioniamo le colonne appropriate dalla tabella. article
tabella.
Poiché siamo interessati solo agli articoli di marzo 2020, abbiamo definito la condizione della clausola WHERE
per garantire che ogni articolo selezionato sia stato pubblicato il 1° marzo 2020 o dopo tale data e prima del 1° aprile 2020. Per unire queste condizioni utilizziamo l'operatore logico AND
: publication_date >= '2020-03-01' AND publication_date < '2020-04-01'
.
Le date sono solitamente memorizzate in tipi di dati speciali come DATE
, DATETIME
, o TIMESTAMP
. Per confrontare una colonna di date con un valore di data specifico, si utilizzano operatori di confronto standard come =
, <
, >
, <=
, >=
, o BETWEEN
. Il formato della data in SQL è tipicamente YYYY-MM-DD
, che sta per anno, mese e giorno. I valori delle parti di data sono separati da trattini.
Si noti che i letterali di confronto tra date devono essere racchiusi tra apici singoli (publication_date >= '2020-03-01'
).
Esercizio 18: Trovare il traffico di giugno per un dato articolo
Domanda: Trovare le informazioni sul traffico dell'articolo '/blog/puppy-training-techniques/
' nel mese di giugno 2020. Visualizzare visit_date
e il numero di visualizzazioni in quel giorno.
Soluzione:
SELECT visit_date, views FROM article_traffic WHERE url = '/blog/puppy-training-techniques/' AND visit_date >= '2020-06-01' AND visit_date < '2020-07-01' ; |
Spiegazione: Selezioniamo dalla tabella la data della visita e il numero di visualizzazioni al giorno. article_traffic
tabella.
Vogliamo visualizzare il traffico di un articolo specifico. Pertanto, filtriamo questo articolo utilizzando il suo URL: url = '/blog/puppy-training-techniques/'
. Notare le virgolette singole intorno al valore di confronto.
Poiché siamo interessati al traffico del mese di giugno 2020, imponiamo altre due condizioni WHERE
sulla colonna visit_date
. Queste condizioni restituiranno solo le informazioni sul traffico di giugno: visit_date >= '2020-06-01' AND visit_date < '2020-07-01'
.
Questa volta, la clausola WHERE
comprende tre condizioni, tutte combinate con gli operatori logici AND
.
Esercizio 19: Elencare gli articoli per un autore e una categoria
Domanda: Restituire l'URL di tutti gli articoli di Lewis Goodwin (ID autore = 16) della categoria 3 ("Salute del cane") o della categoria 6 ("Idee regalo per cani").
Soluzione:
SELECT url FROM article WHERE author_id = 16 AND (article_category_id = 3 OR article_category_id = 6); |
Spiegazione: Si vuole visualizzare l'URL di articoli specifici della tabella article
tabella.
Per prima cosa, si vogliono elencare gli articoli scritti dall'autore con un ID pari a 16. Questa è la prima condizione della clausola WHERE
: author_id = 16
.
Vogliamo inoltre elencare solo gli articoli della categoria 3 o della categoria 6. Dobbiamo creare una condizione composta con l'operatore logico OR
e racchiuderla tra parentesi: (article_category_id = 3 OR article_category_id = 6
).
Infine, combiniamo queste due condizioni con l'operatore logico AND
.
Esercizio 20: Mostrare i dati sul traffico di un articolo specifico
Domanda: Restituire tutti i dati sul traffico degli articoli al 1° dicembre 2020 in cui il numero di visualizzazioni è compreso tra 50 e 100 (cioè 50 <= visualizzazioni <= 100).
Soluzione:
SELECT * FROM article_traffic WHERE views <= 100 AND views >= 50 AND visit_date = '2020-12-01' ; |
Spiegazione: Selezioniamo tutte le colonne della tabella article_traffic
tabella.
Vogliamo visualizzare i dati sul traffico degli articoli con un numero di visualizzazioni compreso tra 50 e 100, quindi definiamo la condizione della clausola combinata WHERE
come views <= 100 AND views >= 50
.
Poiché siamo interessati ai dati dal 1° dicembre 2020, definiamo un'altra condizione di clausola WHERE
: visit_date = '2020-12-01'
.
Query On con la pratica di SQL WHERE!
In questo articolo sono state presentate tutte le nozioni di base della clausola SQL WHERE
. Gli esercizi pratici riguardano il filtraggio di valori numerici, testuali, booleani e NULL e la combinazione di più condizioni per ottenere opzioni di filtraggio più complesse. Potete trovare altri articoli con esercizi pratici di SQL qui.
Tutti questi corsi sono disponibili nel nostro percorso Pratica su SQL , dove troverete ancora più pratica di SQL. Per fare pratica al massimo, il nostro pacchetto Completo per sempre SQL vi dà accesso a vita a tutti i nostri corsi attuali e futuri con un unico acquisto.
La pratica rende perfetti! Buon viaggio in SQL!