Cos'è SQL?
SQL, acronimo di Structured Query Language, è uno strumento potente per cercare tra grandi quantità di dati nei database e restituire informazioni specifiche per l'analisi. Imparare SQL è un requisito di base per chiunque voglia entrare nel mondo dei dati, che si tratti di ruoli come business analyst, data analyst, data scientist o data engineer.
In questo tutorial, imparerai 25 dei comandi SQL più comuni, sufficienti per la maggior parte delle attività legate ai database.
Comandi SQL con esempi
Tabella di esempio
Per tutto il tutorial useremo le tabelle films e soundtracks.
|
films |
|||||
|
movie_name |
director |
revenue |
date |
genre |
language |
|
Avengers: Age of Ultron |
J. Whedon |
1400000000 |
2015 |
Azione |
Inglese |
|
Amelie |
Jean-Pierre Jeunet |
174000000 |
2002 |
Drammatico |
Francese |
|
soundtracks |
||
|
soundtrack |
composer |
date |
|
Inception: Music from the Motion Picture |
Hans Zimmer |
2010 |
|
Le Fabuleux Destin D’Amelie Poulain |
Yann Tiersen |
2001 |
1. SELECT
L'istruzione SELECT viene usata per specificare quali colonne di una tabella del database includere nel risultato.
Questo esempio seleziona solo le colonne movie_name e director; le altre colonne non vengono restituite.
SELECT movie_name, director
FROM films;
Per selezionare tutte le colonne di una tabella, puoi usare SELECT * (pronunciato “star”). Questo esempio seleziona tutte le colonne dalla tabella films.
SELECT *
FROM films;
2. LIMIT
Limitare il numero di righe restituite da una tabella è un trucco utile per velocizzare l’esecuzione delle query. Per limitare il numero di righe, puoi usare il comando LIMIT. Questo esempio seleziona tutte le colonne dalla tabella films e poi limita i risultati alle prime dieci righe.
SELECT *
FROM films
LIMIT 10;
3. AS
Per rinominare una colonna o una tabella nei risultati, puoi usare il comando AS per impostare un alias in output. Questo esempio seleziona la colonna movie_name e le assegna l’alias movie_title.
SELECT movie_name AS movie_title
FROM films;
4. SELECT DISTINCT
I dataset spesso contengono righe o valori duplicati in una colonna. Combinare SELECT con DISTINCT elimina i duplicati. Questo esempio restituisce i valori unici della colonna director.
SELECT DISTINCT director
FROM films;
5. COUNT
COUNT() restituisce il numero di righe nella tabella o nel gruppo. Questo esempio restituisce il numero di righe nella tabella films, quindi rinomina il risultato come number_of_films.
SELECT COUNT(*) AS number_of_films
FROM films;Inizia a imparare SQL gratis
Manipolazione dei dati in SQL
6. MIN
MIN() restituisce il valore minimo in una colonna numerica. Per le colonne di testo, MIN() restituisce il primo valore in ordine alfabetico. Questo esempio restituisce il film con il ricavo più basso.
SELECT MIN(revenue) AS minimum_revenue,
FROM films;
7. MAX
MAX() restituisce il valore massimo in una colonna numerica. Per le colonne di testo, MAX() restituisce l’ultimo valore in ordine alfabetico. Questo esempio restituisce il film con il ricavo più alto.
SELECT MAX(revenue) AS maximum_revenue,
FROM films;
8. SUM
SUM() restituisce il totale dei valori numerici. Questo esempio restituisce il ricavo totale di tutti i film elencati nella tabella films.
SELECT SUM(revenue) AS total_revenue
FROM films;
9. AVERAGE
AVERAGE calcola la media aritmetica di una colonna. Questo esempio restituisce il ricavo medio di tutti i film elencati nella tabella films.
SELECT AVERAGE(revenue) AS average_earned
FROM films;
10. WHERE
La clausola WHERE filtra le righe che soddisfano una certa condizione. Ad esempio, sotto stiamo filtrando i film che hanno incassato più di 500 milioni di dollari
SELECT revenue
FROM films
WHERE revenue > 500000000;
Si possono usare anche altri operatori condizionali come <, >, =>, <=, == (uguale), != (diverso) per il filtraggio.
11. HAVING
La clausola HAVING è simile a WHERE, ma può essere usata solo con funzioni di aggregazione, mentre WHERE no. Per esempio, nella query qui sotto, scegliamo tutti i generi cinematografici che hanno almeno 50 film nella loro categoria:
SELECT movie_name, director, date, COUNT(genre)
FROM films
GROUP BY genre
HAVING COUNT(genre) >= 50;
Ecco un altro esempio che raggruppa i film per classificazione d’età e sceglie solo le classificazioni con ricavo medio superiore a 100 milioni:
SELECT movie_name, director, date, revenue
FROM films
GROUP BY age_rating
HAVING AVERAGE(genre) >= 100;
12. AND
L’operatore AND si usa quando si filtrano righe che soddisfano più di una condizione. Nell’esempio sotto, filtriamo i film in inglese che hanno incassato più di 500 milioni di dollari.
SELECT *
FROM films
WHERE revenue > 500000000 AND
language == "English";
13. OR
OR è un altro operatore condizionale che ti permette di selezionare righe se una qualunque delle condizioni separate da OR è vera. Questo esempio restituisce i film in inglese che hanno incassato meno di 100 milioni di dollari o i film in francese che hanno incassato più di 500 milioni di dollari.
SELECT *
FROM films
WHERE (revenue < 100000000 AND language == "English") OR
(revenue > 500000000 AND language == “French”);
14. BETWEEN
BETWEEN ti permette di selezionare righe all’interno di un certo intervallo, rendendo le clausole WHERE più semplici e leggibili. Nell’esempio sopra, scegliamo tutti i film usciti tra il 2020 e il 2022.
SELECT *
FROM films
WHERE date BETWEEN 2020 AND 2022;
15. IN
L’operatore IN è una scorciatoia per più istruzioni OR. Questo esempio restituisce tutti i film usciti in uno qualsiasi di questi anni — 1998, 1966, 2001 e 2012.
SELECT movie_name, date, revenue
FROM films
WHERE date IN (1998, 1966, 2001, 2012);
16. LIKE
L’operatore LIKE ti consente di cercare pattern in una colonna di testo usando stringhe speciali chiamate wildcard. Le wildcard ti aiutano a trovare stringhe che corrispondono a un pattern specifico. Per esempio, usando la wildcard “A% W%” sulla colonna director troverai tutti i registi con nome che inizia per A e cognome che inizia per W.
SELECT *
FROM films
WHERE director LIKE "A% W%";
17. GROUP BY
GROUP BY ti permette di raggruppare le righe in base ai valori di una colonna. GROUP BY si usa di solito con funzioni di aggregazione come COUNT, MIN, MAX, AVERAGE e altre. Nell’esempio sotto, troviamo il ricavo medio di ogni genere cinematografico.
SELECT AVERAGE(revenue), movie_name, director, date
FROM films
GROUP BY genre;
Avremmo potuto usare MIN, MAX o COUNT(revenue) per trovare il ricavo più basso, quello più alto o il numero di film in ciascun genere. Nota che l’istruzione GROUP BY praticamente non ha effetto sulla query se non è usata con una funzione di aggregazione.
18. ORDER BY
ORDER BY ti permette di ordinare le righe in base al valore di una colonna. Puoi ordinare in ordine crescente (default) o decrescente aggiungendo ASC o DESC. Questo esempio ordina i ricavi in ordine crescente.
SELECT *
FROM films
ORDER BY revenue ASC;
19. UPDATE
UPDATE si usa per modificare i valori delle singole celle in una tabella esistente. Si usa con la parola chiave SET. Questo esempio aggiorna il regista “J. Whedon” in “Joss Whedon”.
UPDATE films
SET director = "Joss Whedon"
WHERE director = "J. Whedon"
La clausola WHERE è fondamentale quando si scrivono istruzioni UPDATE. Senza di essa, la query sopra avrebbe reso tutti i film diretti da Joss Whedon.
20. ALTER TABLE
Puoi usare l’istruzione ALTER TABLE per modificare le proprietà della tabella e delle sue colonne (non i valori delle celle). Ad esempio, cambiare i nomi delle colonne, aggiungerne di nuove, eliminarle o modificarne il tipo di dato. Gli esempi sotto mostrano l’eliminazione della colonna date e l’aggiunta della colonna age_rating.
ALTER TABLE films
DROP COLUMN date;
ALTER TABLE films
ADD COLUMN age_rating;
21. CREATE TABLE
CREATE TABLE crea una nuova tabella in un database. Sotto, creiamo una tabella “libraries” con quattro colonne — una colonna intera chiamata id, una colonna di caratteri chiamata name, una colonna di caratteri chiamata version e una colonna intera chiamata num_downloads.
CREATE TABLE libraries (
lib_id int,
name varchar(100),
version varchar(100),
num_downloads int
)
22. INSERT INTO
L’istruzione INSERT INTO può essere usata per aggiungere nuove righe a una tabella. In questo esempio, aggiungiamo il film “Doctor Strange” alla tabella films.
INSERT INTO films (movie_name, director, revenue, date, genre, language)
VALUES ("Doctor Strange 2", “Sam Raimi”, 409000000, 2022, “Action”, “English”)
23. INNER JOIN
Il comando INNER JOIN seleziona le righe che hanno valori corrispondenti in entrambe le tabelle. Ad esempio, nella query qui sotto uniamo le tabelle films e soundtracks sulla colonna comune date, il che restituisce film e colonne sonore usciti negli stessi anni.
SELECT *
FROM films
INNER JOIN soundtracks
ON films.date = soundtracks.date
LIMIT 10;
24. LEFT JOIN
Un LEFT JOIN mantiene tutti i record originali della tabella di sinistra e restituisce valori mancanti per le colonne della tabella di destra in cui il campo di join non ha trovato corrispondenze.
SELECT *
FROM films
LEFT JOIN soundtracks
ON films.date = soundtracks.date
LIMIT 10;
25. RIGHT JOIN
Un RIGHT JOIN mantiene tutti i record originali della tabella di destra e restituisce valori mancanti per le colonne della tabella di sinistra in cui il campo di join non ha trovato corrispondenze.
SELECT *
FROM films
LEFT JOIN soundtracks
ON films.date = soundtracks.date
LIMIT 10;
Cheat sheet dei comandi SQL
Per saperne di più su SQL, dai un’occhiata a queste risorse: