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

10 esercizi pratici di SQL per principianti con soluzioni

Risolvete questi dieci problemi pratici di SQL e verificate a che punto siete con le vostre conoscenze di SQL!

Questo articolo è dedicato alla pratica di SQL. È il modo migliore per imparare l'SQL. Vi mostriamo dieci esercizi pratici di SQL in cui dovete applicare i concetti essenziali di SQL. Se siete alle prime armi con l'SQL, non preoccupatevi: questi esempi sono per i principianti.

Utilizzateli per esercitarvi o per imparare nuovi concetti di SQL. Per ulteriori nozioni teoriche ed esercizi (ancora più numerosi!), c'è il nostro corso interattivo. SQL per principianti interattivo. Vi insegna a selezionare i dati da una o più tabelle, ad aggregare e raggruppare i dati, a scrivere subquery e a utilizzare le operazioni di set. Il corso comprende 129 esercizi interattivi, quindi non mancano le opportunità di esercitarsi con l'SQL, soprattutto se si aggiungono alcuni dei 12 modi per imparare l'SQL online.

A proposito di pratica, iniziamo con i nostri esercizi!

Il set di dati

La domanda è sempre quella di dove trovare i dati per esercitarsi con l'SQL. Utilizzeremo il nostro set di dati per tutti gli esercizi. Non c'è bisogno di limitarsi a questo: è possibile trovare altri dataset online gratuiti per esercitarsi con l'SQL.

Il nostro dataset è composto da due tabelle.

La tabella distribution_companies elenca le società di distribuzione cinematografica con le seguenti colonne:

  • id - L'ID della società di distribuzione. È la chiave primaria della tabella.
  • company_name - Il nome della società di distribuzione.

La tabella è mostrata di seguito.

idcompany_name
1Columbia Pictures
2Paramount Pictures
3Warner Bros. Pictures
4United Artists
5Universal Pictures
6New Line Cinema
7Miramax Films
8Produzioni Europee Associate
9Buena Vista
10StudioCanal

La seconda tabella è movies. Queste sono le colonne:

  • id - L'ID del film. È la chiave primaria della tabella.
  • movie_title - Il titolo del film.
  • imdb_rating - La valutazione del film su IMDb.
  • year_released - L'anno di uscita del film.
  • budget - Il budget del film in milioni di dollari.
  • box_office - I guadagni del film in milioni di dollari.
  • distribution_company_id - L'ID della società di distribuzione, con riferimento alla tabella distribution_companies (chiave esterna).
  • language - La lingua o le lingue parlate nel film.

La tabella è mostrata di seguito.

idmovie_titleimdb_ratingyear_releasedbudgetbox_officedistribution_company_idlanguage
1The Shawshank Redemption9.2199425.0073.301English
2The Godfather9.219727.20291.002English
3The Dark Knight9.02008185.001,006.003English
4The Godfather Part II9.0197413.0093.002English, Sicilian
512 Angry Men9.019570.342.004English
6Schindler's List8.9199322.00322.205English, German, Yiddish
7The Lord of the Rings: The Return of the King8.9200394.001,146.006English
8Pulp Fiction8.819948.50213.907English
9The Lord of the Rings: The Fellowship of the Ring8.8200193.00898.206English
10The Good, the Bad and the Ugly8.819661.2038.908English, Italian, Spanish

Esercizio 1: Selezione di tutte le colonne di una tabella

Esercizio: Selezionare tutti i dati dalla tabella distribution_companies.

Soluzione:

SELECT *
FROM distribution_companies;

Spiegazione della soluzione: Selezionare i dati utilizzando l'istruzione SELECT. Per selezionare tutte le colonne, utilizzare un asterisco (*). La tabella da cui vengono selezionati i dati è specificata nella clausola FROM.

Soluzione in uscita:

idcompany_name
1Columbia Pictures
2Paramount Pictures
3Warner Bros. Pictures
4United Artists
5Universal Pictures
6New Line Cinema
7Miramax Films
8Produzioni Europee Associate
9Buena Vista
10StudioCanal

Esercizio 2: Selezione di alcune colonne da una tabella

Esercizio: Per ogni film, selezionare il titolo del film, la valutazione IMDb e l'anno di uscita del film.

Soluzione:

SELECT
  movie_title,
  imdb_rating,
  year_released
FROM movies;

Spiegazione della soluzione: Elencare tutte le colonne necessarie (movie_title, imdb_rating e year_released) nell'istruzione SELECT, separate da una virgola. Fare riferimento alla tabella movies nella clausola FROM.

Soluzione in uscita:

movie_titleimdb_ratingyear_released
The Shawshank Redemption9.21994
The Godfather9.21972
The Dark Knight9.02008
The Godfather Part II9.01974
12 Angry Men9.01957
Schindler's List8.91993
The Lord of the Rings: The Return of the King8.92003
Pulp Fiction8.81994
The Lord of the Rings: The Fellowship of the Ring8.82001
The Good, the Bad and the Ugly8.81966

Esercizio 3: Selezione di poche colonne e filtraggio di dati numerici in WHERE

Esercizio: Selezionare le colonne movie_title e box_office dalla tabella movies. Mostrare solo i film con guadagni superiori a 300 milioni di dollari.

Soluzione:

SELECT
  movie_title,
  box_office
FROM movies
WHERE box_office > 300;

Spiegazione della soluzione: Elencare le colonne in SELECT e fare riferimento alla tabella in FROM. Utilizzare una clausola WHERE per filtrare i dati - scrivere la colonna box_office e utilizzare l'operatore "maggiore di" (>) per mostrare solo i valori superiori a 300 milioni di dollari.

Soluzione in uscita:

movie_titlebox_office
The Dark Knight1,006.00
Schindler's List322.20
The Lord of the Rings: The Return of the King1,146.00
The Lord of the Rings: The Fellowship of the Ring898.20

Esercizio 4: Selezione di alcune colonne e filtraggio di dati testuali in WHERE

Esercizio: Selezionare le colonne movie_title, imdb_rating e year_released dalla tabella movies. Mostrare i film che hanno la parola 'Padrino' nel titolo.

Soluzione:

SELECT
  movie_title,
  imdb_rating,
  year_released
FROM movies
WHERE movie_title LIKE '%Godfather%';

Spiegazione della soluzione: Elencare le colonne in SELECT e fare riferimento alla tabella nella clausola FROM. Utilizzare una clausola WHERE per filtrare i dati. Dopo aver scritto il nome della colonna, utilizzare l'operatore logico LIKE per cercare 'Godfather' nel titolo del film, scritto tra virgolette singole. Per trovare la parola in qualsiasi punto del titolo del film, inserire il carattere jolly (%) prima e dopo la parola.

Soluzione in uscita:

movie_titleimdb_ratingyear_released
The Godfather9.21972
The Godfather Part II9.01974

Esercizio 5: Selezione di alcune colonne e filtraggio dei dati mediante due condizioni in WHERE

Esercizio: Selezionare le colonne movie_title, imdb_rating e year_released dalla tabella movies. Mostrare i film usciti prima del 2001 e con una valutazione superiore a 9.

Soluzione:

SELECT
  movie_title,
  imdb_rating,
  year_released
FROM movies
WHERE year_released < 2001 AND imdb_rating > 9;

Spiegazione della soluzione: Elencare le colonne in SELECT e fare riferimento alla tabella in FROM. Impostare la prima condizione che l'anno di uscita sia precedente al 2001 utilizzando l'operatore "meno di" (<). Per aggiungere un'altra condizione, utilizzate l'operatore logico AND. Utilizzate la stessa logica della prima condizione, questa volta utilizzando l'operatore "maggiore di" con la colonna imdb_rating.

Soluzione in uscita:

movie_titleimdb_ratingyear_released
The Shawshank Redemption9.21994
The Godfather9.21972

Esercizio 6: Filtrare i dati con WHERE e ordinare l'output

Esercizio: Selezionare le colonne movie_title, imdb_rating e year_released dalla tabella movies. Mostrare i film usciti dopo il 1991. Ordinare l'output in base all'anno di uscita in ordine crescente.

Soluzione:

SELECT
  movie_title,
  imdb_rating,
  year_released
FROM movies
WHERE year_released > 1991
ORDER BY year_released ASC;

Spiegazione della soluzione: Elencare le colonne in SELECT e fare riferimento alla tabella in FROM. Filtrare i dati con WHERE applicando l'operatore "maggiore di" alla colonna year_released. Per ordinare i dati, utilizzate la clausola ORDER BY e scrivete il nome della colonna in base alla quale desiderate ordinare. Il tipo di ordinamento viene specificato scrivendo ASC (ascendente) o DESC (discendente). Se il tipo viene omesso, l'output viene ordinato in ordine crescente per impostazione predefinita.

Soluzione di output:

movie_titleimdb_ratingyear_released
Schindler's List8.91993
The Shawshank Redemption9.21994
Pulp Fiction8.81994
The Lord of the Rings: The Fellowship of the Ring8.82001
The Lord of the Rings: The Return of the King8.92003
The Dark Knight9.02008

Esercizio 7: Raggruppare i dati per una colonna

Esercizio: Mostrare il numero di film per ogni categoria linguistica.

Soluzione:

SELECT
  language,
  COUNT(*) AS number_of_movies
FROM movies
GROUP BY language;

Spiegazione della soluzione: Selezionare la colonna language dalla tabella movies. Per contare il numero di film, utilizzare la funzione aggregata COUNT(). Utilizzare l'asterisco (*) per contare le righe, che equivalgono al numero di film. Per dare un nome a questa colonna, utilizzare la parola chiave AS seguita dal nome desiderato. Per mostrare il conteggio in base alla lingua, è necessario raggruppare i dati per essa, quindi scrivere la colonna language nella clausola GROUP BY.

Soluzione in uscita:

languagenumber_of_movies
English7
English, German, Yiddish1
English, Sicilian1
English, Italian, Spanish1

Esercizio 8: Raggruppare i dati per più colonne

Esercizio: Mostrare il conteggio dei film per anno di uscita e lingua. Ordinare i risultati in base alla data di uscita in ordine crescente.

Soluzione:

SELECT
  year_released,
  language,
  COUNT(*) AS number_of_movies
FROM movies
GROUP BY year_released, language
ORDER BY year_released ASC;

Spiegazione della soluzione: Elencare le colonne year_released e language dalla tabella movies in SELECT. Usate COUNT(*) per contare il numero di film e date un nome a questa colonna usando la parola chiave AS. Specificate le colonne in base alle quali volete raggruppare nella clausola GROUP BY. Separare ogni nome di colonna con una virgola. Ordinare l'output usando ORDER BY con la colonna year_released e la parola chiave ASC.

Soluzione in uscita:

year_releasedlanguagenumber_of_movies
1957English1
1966English, Italian, Spanish1
1972English1
1974English, Sicilian1
1993English, German, Yiddish1
1994English2
2001English1
2003English1
2008English1

Esercizio 9: Filtrare i dati dopo il raggruppamento

Esercizio: Mostrare le lingue parlate e il budget medio dei film per categoria linguistica. Mostrare solo le lingue con un budget medio superiore a 50 milioni di dollari.

Soluzione:

SELECT
  language,
  AVG(budget) AS movie_budget
FROM movies
GROUP BY language
HAVING AVG(budget) > 50;

Spiegazione della soluzione: Selezionare la colonna language dalla tabella movies. Per calcolare il budget medio, utilizzare la funzione aggregata AVG() con la colonna budget tra parentesi. Nominare la colonna nell'output utilizzando la parola chiave AS. Raggruppare i dati per rating utilizzando GROUP BY. Per filtrare i dati dopo il raggruppamento, utilizzare una clausola HAVING. In essa, utilizzare lo stesso costrutto AVG() di SELECT e impostare i valori superiori a 50 utilizzando l'operatore "maggiore di".

Soluzione in uscita:

languagemovie_budget
English59.01

Esercizio 10: Selezione di colonne da due tabelle

Esercizio: Mostrare i titoli dei film della tabella moviesognuno con il nome della sua casa di distribuzione.

Soluzione:

SELECT
  movie_title,
  company_name
FROM distribution_companies dc
JOIN movies m
ON dc.id = m.distribution_company_id;

Spiegazione della soluzione: Elencare le colonne movie_title e company_name in SELECT. Nella clausola FROM, fare riferimento alla tabella distribution_companies. Assegnatele un alias dc per abbreviare il nome da usare in seguito. La parola chiave AS viene omessa; se lo si desidera, è possibile utilizzarla. Per accedere ai dati dell'altra tabella, usare JOIN (può anche essere scritto come INNER JOIN) e scrivere il nome della tabella dopo di essa. Assegnare a questa tabella anche un alias. La join utilizzata in questo caso è di tipo interno; restituisce solo le righe che corrispondono alla condizione di join specificata nella clausola ON. Le tabelle vengono unite se la colonna id della tabella distribution_companies è uguale alla colonna distribution_company_id della tabella movies. Per specificare quale colonna proviene da quale tabella, utilizzare l'alias corrispondente di ciascuna tabella.

Soluzione in uscita:

movie_titlecompany_name
The Shawshank RedemptionColumbia Pictures
The Godfather Part IIParamount Pictures
The GodfatherParamount Pictures
The Dark KnightWarner Bros. Pictures
12 Angry MenUnited Artists
Schindler's ListUniversal Pictures
The Lord of the Rings: The Fellowship of the RingNew Line Cinema
The Lord of the Rings: The Return of the KingNew Line Cinema
Pulp FictionMiramax Films
The Good, the Bad and the UglyProduzioni Europee Associate

È stato divertente! Ora è il momento di fare SQL Practice da soli!

Questi dieci esercizi pratici di SQL vi danno un assaggio dell'aspetto pratico di SQL. Che siate a livello principiante, intermedio o avanzato, è la stessa cosa. Ciò che cambia è la complessità dei problemi da risolvere e del codice da scrivere.

Cercate altre sfide nel SQL per principianti corso e nella traccia mensile SQL Practice. Entrambi sono eccellenti per la pratica di SQL online. Questo è vero soprattutto se non avete l'opportunità di usare SQL quotidianamente nel vostro lavoro.

Quindi, non provate a verificare quanto tempo ci vuole per dimenticare ciò che sapevate in SQL! Sfruttate ogni occasione per risolvere il maggior numero possibile di problemi di esercitazione su SQL.