Vai al contenuto principale

Introduzione alla clausola WHERE in SQL

In questo tutorial scoprirai come filtrare le righe in SQL usando la clausola WHERE.
Aggiornato 29 set 2026  · 7 min leggi

Scopri con l'IA

ChatGPTClaudePerplexity

Filtrare le righe di una tabella in base a una determinata condizione o a un insieme di condizioni è una pratica molto comune nell’analisi dei dati. In SQL, puoi farlo usando la clausola where. In questo tutorial la userai in diversi scenari.

Userai PostgreSQL come RDBMS (Relational Database Management System), ma le sintassi non variano molto quando si usano altri sistemi di database. Inizierai configurando un database PostgreSQL e creando manualmente una tabella contenente dati sui paesi. Una volta fatto, eseguirai diverse query di filtro che includono la clausola WHERE.

Nota: Per seguire il tutorial, dovresti conoscere le basi di SQL e PostgreSQL. Se non le conosci, potrebbero esserti utili le seguenti risorse.

Creare una tabella in PostgreSQL

Per seguire questo tutorial, dovrai creare una tabella in PostgreSQL che contenga informazioni sui paesi del mondo. Questa tabella verrà usata per mostrare come funziona la clausola WHERE in diversi scenari.

Passaggio 1: crea un nuovo database

Apri pgAdmin (o l’interfaccia SQL che preferisci) e crea un nuovo database PostgreSQL. Puoi chiamarlo, ad esempio, world_data o come preferisci.

Passaggio 2: crea e popola la tabella

Una volta pronto il database, apri una nuova finestra dell’editor di query SQL ed esegui il seguente codice SQL. Creerà una tabella chiamata countries e inserirà un insieme di record che coprono un’ampia gamma di continenti, anni di indipendenza e regioni:

-- Create the countries tableCREATE TABLE countries (    code VARCHAR(3) PRIMARY KEY,    name VARCHAR(100),    continent VARCHAR(50),    region VARCHAR(100),    surface_area NUMERIC,    indep_year INTEGER,    local_name VARCHAR(100),    gov_form VARCHAR(100),    capital VARCHAR(100),    cap_long NUMERIC,    cap_lat NUMERIC);-- Insert sample data into the countries tableINSERT INTO countries (code, name, continent, region, surface_area, indep_year, local_name, gov_form, capital, cap_long, cap_lat)VALUES('IND', 'India', 'Asia', 'Southern Asia', 3287263, 1947, 'Bharat', 'Federal Republic', 'New Delhi', 77.2090, 28.6139),('PAK', 'Pakistan', 'Asia', 'Southern Asia', 881912, 1947, 'Pakistan', 'Federal Republic', 'Islamabad', 73.0551, 33.6844),('CHN', 'China', 'Asia', 'Eastern Asia', 9596961, NULL, 'Zhongguo', 'People''s Republic', 'Beijing', 116.4074, 39.9042),('VNM', 'Vietnam', 'Asia', 'South-Eastern Asia', 331212, 1945, 'Việt Nam', 'Socialist Republic', 'Hanoi', 105.8544, 21.0285),('JPN', 'Japan', 'Asia', 'Eastern Asia', 377975, NULL, 'Nippon', 'Constitutional Monarchy', 'Tokyo', 139.6917, 35.6895),('DEU', 'Germany', 'Europe', 'Western Europe', 357386, 1955, 'Deutschland', 'Federal Republic', 'Berlin', 13.4050, 52.5200),('FRA', 'France', 'Europe', 'Western Europe', 551695, 843, 'France', 'Republic', 'Paris', 2.3522, 48.8566),('RUS', 'Russia', 'Europe', 'Eastern Europe', 17098242, 1991, 'Rossiya', 'Federation', 'Moscow', 37.6173, 55.7558),('UKR', 'Ukraine', 'Europe', 'Eastern Europe', 603500, 1991, 'Ukrayina', 'Republic', 'Kyiv', 30.5234, 50.4501),('EGY', 'Egypt', 'Africa', 'Northern Africa', 1002450, 1922, 'Misr', 'Republic', 'Cairo', 31.2357, 30.0444),('NGA', 'Nigeria', 'Africa', 'Western Africa', 923768, 1960, 'Nigeria', 'Federal Republic', 'Abuja', 7.4951, 9.0578),('AUS', 'Australia', 'Oceania', 'Australia and New Zealand', 7682300, 1901, 'Australia', 'Federal Parliamentary Democracy', 'Canberra', 149.1245, -35.3075),('USA', 'United States', 'North America', 'North America', 9833517, 1776, 'United States', 'Federal Republic', 'Washington, D.C.', -77.0369, 38.9072),('CAN', 'Canada', 'North America', 'North America', 9984670, 1867, 'Canada', 'Constitutional Monarchy', 'Ottawa', -75.6972, 45.4215),('BRA', 'Brazil', 'South America', 'South America', 8515767, 1822, 'Brasil', 'Federal Republic', 'Brasília', -47.9292, -15.7801),('ARG', 'Argentina', 'South America', 'South America', 2780400, 1816, 'Argentina', 'Federal Republic', 'Buenos Aires', -58.3816, -34.6037);

La tabella contiene informazioni su un totale di circa 16 paesi in tutto il mondo. La tabella ha le seguenti colonne:

  • code, che è la chiave primaria della tabella e indica il codice paese universale per un dato paese

  • name, cioè il nome di un paese

  • continent a cui appartiene un paese

  • region, l’area geografica in cui si trova un paese

  • surface_area del paese

  • indep_year, cioè l’anno in cui un paese ha ottenuto l’indipendenza

  • local_name di un paese

  • gov_form, cioè il tipo di governo in vigore in un paese

  • capital di un paese

  • cap_long, cioè la longitudine della capitale di un paese

  • cap_lat, cioè la latitudine della capitale di un paese

Iniziamo ora a filtrare alcuni record con la clausola WHERE.

Uso della clausola WHERE in SQL

In SQL, la clausola WHERE ti permette di filtrare i record in base a valori sia testuali che numerici. Puoi confrontare questi valori e sono supportate le seguenti operazioni basate sul confronto:

  • = uguale

  • <> e != diverso

  • < minore di

  • > maggiore di

  • <= minore o uguale a

  • >= maggiore o uguale a

Secondo gli standard SQL, è consigliato usare <> invece di !=.

Ora recuperiamo il record del paese il cui code è AUS. La colonna da confrontare è code e il valore da confrontare è AUS. La query sarà:

SELECT * FROM countries WHERE code = 'AUS';

E otterrai:

Nota un paio di cose:

  • La clausola WHERE viene sempre dopo FROM.

  • In SQL, le stringhe sono racchiuse tra apici singoli.

Vediamo ora un confronto numerico. Recuperiamo i record dei paesi che hanno ottenuto l’indipendenza (indep_year) dopo il 1901:

SELECT * FROM countries WHERE indep_year > 1901;

Ottieni i record di un totale di 3 paesi che hanno ottenuto l’indipendenza dopo il 1901. Fai attenzione al comparatore usato qui. La colonna indep_year è di tipo intero. Quindi, nessuna virgoletta nel confronto.

Puoi collegare più condizioni in una clausola WHERE usando i connettivi AND e OR. La seguente query restituisce i record di quei paesi where continent = 'Asia' and indep_year > 1900:

SELECT * FROM countries WHERE continent = 'Asia' AND indep_year > 1901;

Ottieni informazioni su un totale di tre paesi situati nel continente Asia che hanno ottenuto l’indipendenza dopo il 1901. Nota che nella query sopra hai confrontato sia valori testuali che numerici. Come esercizio, prova diverse combinazioni di AND e OR nella clausola WHERE.

Nota: Quando combini AND e OR, non dimenticare di racchiudere ciascuna condizione tra parentesi. Altrimenti, SQL potrebbe non determinare correttamente la precedenza di valutazione delle condizioni.

Con la seguente query ottieni un totale di sei paesi.

SELECT * FROM countries WHERE(continent = 'Europe' AND indep_year > 1900)or(continent = 'Asia' AND indep_year > 1900);

Puoi anche collegare più di due condizioni in una clausola WHERE:

SELECT * FROM countries WHERE continent = 'Asia' OR indep_year > 1900 OR surface_area > 652090;

Qui ottieni un totale di 15 paesi che si trovano in Asia oppure hanno ottenuto l’indipendenza dopo il 1901 oppure hanno una superficie maggiore di 652090.

Convertiamo ora la query in una variante con AND, più restrittiva:

SELECT * FROM countries WHERE continent = 'Asia' AND indep_year > 1901 AND surface_area > 652090;

In questo caso otterrai un totale di due paesi.

Puoi anche affiancare sottoquery in una clausola WHERE. Mettiamo che tu voglia recuperare il record del paese con la superficie più ampia, ma non sai qual è la superficie massima raggiunta da un paese. In situazioni come questa, la seguente query può tornare utile:

SELECT * FROM countries WHERE surface_area in (SELECT MAX(surface_area) FROM countries);

Dovresti ottenere il record della Russia.

Conclusione

Complimenti, hai completato questo tutorial. Filtrare i risultati delle query in base alle condizioni è senza dubbio una competenza fondamentale, e questo tutorial ne ha fornito un’introduzione. Se vuoi affinare ulteriormente le tue competenze SQL, dai un’occhiata ai nostri corsi (link qui sotto).


Sayak Paul's photo
Author
Sayak Paul

Sayak lavora in Hugging Face, dove scrive codice, redige articoli e tiene talk. Trascorre la maggior parte del tempo su tutto ciò che riguarda la libreria Diffusers. È anche project instructor per DataCamp e autore di numerosi tutorial su DataCamp. Fuori dal lavoro, lo troverai a fare binge-watching di Suits su Netflix per l’ennesima volta. 

Domande frequenti sulla clausola WHERE in SQL

Posso usare colonne testuali e numeriche in una clausola WHERE?

Sì, puoi filtrare sia per valori testuali (ad es. 'Asia') sia numerici (ad es. > 1901). Ricorda solo che i valori testuali devono essere racchiusi tra apici singoli.

C’è differenza tra <> e != in SQL?

Entrambi significano "diverso", ma <> è l’operatore standard SQL. Alcuni database supportano anche !=, ma è meglio usare <> per compatibilità.

Come filtro i record con valori NULL?

Usa IS NULL o IS NOT NULL. Per esempio:

SELECT * FROM countries WHERE indep_year IS NULL;

Posso usare sottoquery in una clausola WHERE?

Sì, le sottoquery possono essere usate per confrontare una colonna con il risultato di un’altra query. Per esempio:

SELECT * FROM countries WHERE surface_area = (SELECT MAX(surface_area) FROM countries);

La clausola WHERE viene prima o dopo la clausola FROM?

La clausola WHERE viene sempre dopo la clausola FROM e prima di clausole come GROUP BY o ORDER BY.

Posso usare WHERE con i JOIN?

Assolutamente. Puoi applicare la clausola WHERE dopo aver eseguito un JOIN per filtrare il risultato combinato.

Argomenti
Analisi dei dati
Data Science
SQL

Corsi SQL

Corso

Migliorare le prestazioni delle query in PostgreSQL

4 ore
14.2K
Scopri come organizzare le tue query PostgreSQL per farle girare in un attimo.
Vedi i dettagliRight Arrow
Inizia Il Corso
Mostra altroRight Arrow
Correlato

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

Mostra AltroMostra Altro