Come usare l’operatore IN in SQL: guida a tecniche di filtraggio efficienti
L’operatore IN di SQL ti permette di filtrare i risultati includendo solo le righe che soddisfano condizioni specifiche. Scopri tutto il suo potenziale e le alternative.
L’operatore IN di SQL è uno strumento utile per filtrare i dati in base a un insieme di valori. Inserito in query lunghe, l’operatore IN aiuta a semplificare query complesse e a migliorarne la leggibilità.
Se aspiri a lavorare con i dati, ti consiglio i corsi Introduction to SQL e SQL Fundamentals su DataCamp per imparare le basi di come usare SQL per filtrare i dati. Per un ripasso veloce, dai un’occhiata al nostro Cheat Sheet SQL di base.
Che cos’è l’operatore IN in SQL?
L’operatore IN in SQL è uno strumento potente per filtrare i dati nelle query. Aiuta a perfezionare i risultati restituendo solo le righe che soddisfano condizioni specifiche.
Tuttavia, l’operatore IN si usa dopo la clausola WHERE per restituire risultati con più condizioni. Perciò, l’operatore IN può essere usato quando il tipo di dato filtrato presenta valori diversi.
-- Select the employee ID, employee name, and department columns
SELECT employee_id, employee_name, department
FROM employees
-- Filter the results to include only employees whose department is 'Sales' and 'HR'
WHERE department IN ('Sales', 'HR');
Nell’esempio sopra, selezioniamo le colonne employee_id, employee_name e department dalla tabella employees. Tuttavia, restituiamo solo le righe in cui i dipendenti appartengono a Sales e HR.
L’operatore IN può filtrare diversi tipi di dati SQL, tra cui stringhe, numeri e date. Assicurati sempre che la colonna di riferimento abbia il tipo di dato appropriato quando filtri le righe.
Sintassi dell’operatore IN in SQL
L’operatore IN ha una sintassi semplice per filtrare i valori. Si usa nella clausola WHERE per consentire il filtro di più valori da un elenco. La sintassi generale dell’operatore IN è la seguente.
-- Select the columns you want to retrieve
SELECT column_name(s)
-- Specify the table from which to retrieve the data
FROM table_name
-- Filter the results to include only those rows where the column's value matches any value in the specified list
WHERE column_name IN (value1, value2, ...);
Di seguito un esempio pratico di come includere l’operatore IN nella clausola WHERE.
-- Select the employee ID, employee name, and department columns
SELECT employee_id, employee_name, department
FROM employees
-- Filter the results to include only employees whose department is 'Sales' and 'HR'
WHERE department IN ('Sales', 'HR');
Punti importanti da ricordare
L’operatore IN si inserisce nella clausola WHERE dell’istruzione SELECT. Questa posizione permette alla query di filtrare le righe in base a più valori. Quando usato in una query SQL, l’operatore IN semplifica le query complesse e le rende più leggibili.
L’operatore IN è standard in diversi database, tra cui SQL Server, PostgreSQL, MySQL e Oracle. Scrivere l’operatore IN in maiuscolo come standard è importante per migliorare la leggibilità.
Casi d’uso comuni dell’operatore IN
L’operatore IN di SQL è usato in diverse applicazioni di analisi dei dati. In questa sezione esploreremo alcuni dei casi d’uso più comuni, tra cui filtrare i dati, gestire valori multipli e usare le sottoquery.
Filtrare i dati
L’operatore IN filtra i record e restituisce un insieme di valori specificati. Ad esempio, la query qui sotto seleziona tutte le colonne dalla tabella employees e restituisce le righe con dipendenti dei reparti Sales, HR e IT.
-- Select all columns from employees table
SELECT employee_id, employee_name, department
FROM employees
-- Filter to include only 'Sales', 'HR', and 'IT' departments
WHERE department IN ('Sales', 'HR', 'IT');
Gestire valori multipli
L’operatore IN si usa anche per filtrare record con più valori. Questa applicazione è utile quando filtri i dati usando più condizioni OR. Quindi, l’operatore IN offre un modo più semplice per migliorare la leggibilità della query.
Di seguito come apparirebbe la query con l’operatore OR al posto dell’operatore IN.
-- Main query to select employee_id and name from the employees table
SELECT employee_id, name
FROM employees
-- Filter employees based on multiple department names using OR conditions
WHERE department = 'Sales'
OR department = 'Marketing'
OR department = 'HR';
Ecco invece la query con l’operatore IN. Nota la semplicità ottenuta eliminando i ripetuti OR.
-- Main query to select employee_id and name from the employees table
SELECT employee_id, name
FROM employees
-- Filter employees based on a list of department names using the IN operator
WHERE department IN ('Sales', 'Marketing', 'HR');
Sottoquery
Puoi usare l’operatore IN anche per filtrare i risultati in una sottoquery. Questa operazione ti permette di filtrare record da un’altra query o da dati correlati. Nell’esempio seguente, la sottoquery seleziona il department_id del reparto Sales dalla tabella departments. Di conseguenza, la query principale restituirà le righe contenenti employee_id e nome dalla tabella employees, filtrate secondo la sottoquery.
-- Main query to select employee_id and name from the employees table
SELECT employee_id, name
FROM employees
-- Filter employees based on department_id using a subquery
WHERE department_id IN (
-- Subquery to get department_id for the "Sales" department
SELECT department_id
FROM departments
WHERE department_name = 'Sales'
);
Limitazioni e alternative
Sebbene l’operatore IN sia semplice da usare nelle query SQL, presenta alcune limitazioni nelle sue applicazioni, tra cui:
Problemi di performance con elenchi grandi: Usare l’operatore IN con elenchi molto lunghi di valori può causare problemi di performance, rallentando l’esecuzione della query.
Gestione dei valori NULL: L’operatore IN non gestisce in modo efficiente i valori NULL e può restituire risultati imprevedibili. Questo perché i valori NULL non sono inclusi nell’elenco di valori.
Flessibilità limitata: L’operatore IN è limitato nella gestione di dataset grandi con più colonne. Puoi filtrare solo un numero limitato di colonne usando le sottoquery.
Le alternative per evitare le limitazioni dell’operatore IN includono:
Usare l’operatore EXISTS
L’operatore EXISTS verifica se i record specificati sono presenti in una sottoquery. Se usato correttamente, è efficiente e veloce.
-- Select employee ID and name for employees in departments located in New York using EXISTS
SELECT employee_id, employee_name
FROM employees e
-- Check if there exists a row in the departments table
WHERE EXISTS (
-- Select 1 is used here as a placeholder; it simply checks for existence
SELECT 1
FROM departments d
-- Match the department_id in employees with department_id in departments
WHERE d.department_id = e.department_id
-- Filter for departments located in New York
AND d.location = 'New York'
);
Usare JOIN
La clausola JOIN di SQL è efficiente quando interroghi dati con filtri complessi ed è utile per filtrare dati da più colonne correlate. Nell’esempio seguente, la clausola JOIN unisce le tabelle employees e departments su department_id per filtrare i record dei dipendenti che lavorano a New York.
-- Select employee ID and name for employees in departments located in New York using JOIN
SELECT e.employee_id, e.employee_name
FROM employees e
-- Join the employees table with the departments table on department_id
JOIN departments d ON e.department_id = d.department_id
-- Filter the results to include only departments located in New York
WHERE d.location = 'New York';
Usare le CTE (Common Table Expressions) o tabelle temporanee
Se hai tabelle con elenchi molto lunghi, valuta l’uso delle CTE per memorizzare l’elenco di valori prima di interrogare. Questo approccio migliora performance e leggibilità delle query.
-- Define a CTE (Common Table Expression) to store the list of department IDs located in New York
WITH DepartmentList AS (
SELECT department_id
FROM departments
WHERE location = 'New York'
)
-- Select employee ID and name for employees who belong to the departments listed in the CTE
SELECT e.employee_id, e.employee_name
FROM employees e
-- Filter the results to include only employees whose department_id is in the list of department IDs from the CTE
WHERE e.department_id IN (SELECT department_id FROM DepartmentList);
Per imparare altre tecniche avanzate di filtraggio dei dati, ti consiglio il career track Associate Data Analyst in SQL di DataCamp. Puoi anche dare un’occhiata al corso Intermediate SQL Server di DataCamp, che include un capitolo sulle common table expressions e altri argomenti avanzati.
Conclusione
Capire l’operatore IN in SQL è importante per chi lavora con i dati, perché ti permette di filtrare e trasformare i dati durante l’analisi. Per affinare le tue competenze nell’uso dell’operatore IN, esercitati con dataset diversi.
Se vuoi portare le tue conoscenze di SQL a un livello intermedio, ti consiglio il corso Reporting in SQL per esplorare altre tecniche di interrogazione avanzate. Inoltre, la Certificazione SQL Associate ti aiuterà a distinguerti tra gli altri data analyst mostrando la tua competenza pratica nell’uso di SQL per analisi avanzate.
Author
Allan Ouko
Technical writer di Data Science con esperienza pratica in data analytics, business intelligence e data science. Scrivo contenuti pratici e orientati al settore su SQL, Python, Power BI, Databricks e data engineering, basati su lavoro di analytics reale. La mia scrittura unisce profondità tecnica e impatto sul business, aiutando i professionisti a trasformare i dati in decisioni sicure.
Domande frequenti
Posso usare l’operatore IN per filtrare tipi di dati diversi?
L’operatore IN filtra diversi tipi di dati SQL, tra cui stringhe, numeri e date.
Puoi usare l’operatore IN nelle sottoquery?
L’operatore IN si usa nelle sottoquery come metodo avanzato per filtrare i dati della query principale.
Qual è l’alternativa all’operatore IN?
Le alternative migliori all’operatore IN sono l’operatore EXISTS, la clausola JOIN e le Common Table Expressions (CTE).
Quali database sono compatibili con l’operatore IN?
I principali database supportano l’uso dell’operatore IN, tra cui SQL Server, MySQL, PostgreSQL e Oracle.
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.