Saltar al contenido principal

Cómo utilizar el operador IN de SQL: Guía de técnicas de filtrado eficaces

El operador SQL IN te permite filtrar los resultados de la consulta para incluir sólo las filas que cumplan las condiciones especificadas. Explora todo su potencial y sus alternativas.
Actualizado 29 jul 2024  · 8 min de lectura

El operador SQL IN es una herramienta útil para filtrar datos a partir de un conjunto de valores. Cuando se incluye en consultas largas, el operador IN ayuda a simplificar las consultas complejas y mejora la legibilidad.

Si eres un aspirante a profesional de los datos, te recomiendo que sigas los cursos Introducción a SQL y Fundamentos de SQL de DataCamp para aprender los fundamentos de la aplicación de SQL para filtrar datos. Para un repaso rápido, consulta nuestra Hoja de trucos sobre fundamentos de SQL.

¿Qué es el operador SQL IN?

El operador SQL IN es una potente herramienta para filtrar datos en las consultas SQL. Ayuda a refinar los resultados de la consulta devolviendo sólo las filas que cumplen las condiciones especificadas.

Sin embargo, el operador IN se incluye después de la cláusula WHERE para devolver resultados con múltiples condiciones. Por lo tanto, el operador IN puede utilizarse cuando el tipo de datos filtrado tiene valores diferentes.

-- 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');

En el ejemplo anterior, seleccionamos las columnas employee_id, employee_name y department de la tabla employees. Sin embargo, sólo devolvemos las filas en las que los empleados son de Sales y HR.

El operador IN puede filtrar distintos tipos de datos SQL, como cadenas, números y fechas. Asegúrate siempre de que la columna de referencia tiene el tipo de datos adecuado al filtrar filas.

Sintaxis del operador SQL IN

El operador IN tiene una sintaxis sencilla para filtrar valores. Se utiliza en la cláusula WHERE para permitir filtrar varios valores de una lista de columnas. La sintaxis general del operador IN es la que se muestra a continuación.

-- 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, ...);

A continuación se muestra un ejemplo práctico de inclusión del operador IN en la cláusula 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');

Puntos importantes que debes recordar

El operador IN se incluye en la cláusula WHERE de la declaración SELECT. Esta colocación permite que la consulta filtre filas basándose en varios valores. Cuando se utiliza en una consulta SQL, el operador IN simplifica las consultas complejas y facilita su lectura.

El operador IN es estándar en distintas bases de datos, como SQL Server, PostgreSQL, MySQL y Oracle. Escribir el operador IN en mayúsculas, como es la norma, es importante para mejorar la legibilidad.

Casos de uso habituales del operador IN

El operador SQL IN se utiliza para diferentes aplicaciones de análisis de datos. Esta sección explorará algunos de los casos de uso más comunes, incluyendo el filtrado de datos, el manejo de valores múltiples y la utilización de subconsultas. 

Filtrar datos

El operador IN filtra, registra y devuelve un conjunto de valores especificados. Por ejemplo, la consulta siguiente seleccionará todas las columnas de la tabla employees y devolverá filas con empleados de los departamentos Sales, HR y 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');

Manejo de valores múltiples

El operador IN también se utiliza para filtrar registros con varios valores. Esta aplicación es útil para filtrar datos utilizando varias condiciones OR. Por lo tanto, el operador IN proporciona una forma más sencilla de mejorar la legibilidad de la consulta.

A continuación se muestra cómo quedaría la consulta con el operador OR en lugar del operador 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';

Aquí tienes la consulta utilizando el operador IN. Observa la simplicidad de la consulta al eliminar el operador repetido 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');

Subconsultas

También puedes utilizar el operador IN para filtrar los resultados de una subconsulta. Esta operación te permite filtrar registros de otra consulta o datos relacionados. En el ejemplo siguiente, la subconsulta selecciona el department_id del departamento Sales de la tabla departments. Por tanto, la consulta principal devolverá filas que contengan employee_id y nombre de la tabla employees, filtradas según la subconsulta.

-- 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'
);

Limitaciones y alternativas

Aunque el operador IN es sencillo de utilizar en las consultas SQL, existen algunas limitaciones en sus aplicaciones, entre las que se incluyen las siguientes:

  • Problemas de rendimiento con listas grandes: Utilizar el operador IN con listas grandes de valores podía causar problemas de rendimiento, ralentizando la ejecución de la consulta.
  • Manejar valores NULL: El operador IN no maneja eficazmente los valores de NULL y podría devolver resultados imprevistos. Este problema se debe a que los valores NULL no están incluidos en la lista de valores.
  • Flexibilidad limitada: El operador IN es limitado cuando se manejan grandes conjuntos de datos con varias columnas. Sólo se pueden filtrar columnas limitadas mediante subconsultas.

Las alternativas para evitar las limitaciones del operador IN incluyen:

Utilizar el operador EXISTS

El operador EXISTS comprueba si los registros especificados están en una subconsulta. Si se utiliza correctamente, este operador es eficaz y rápido.

-- 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'
);

Utilizar JOIN

La cláusula SQL JOIN es eficaz cuando se consultan datos con filtrado complejo y útil cuando se filtran datos de varias columnas o columnas relacionadas. En el siguiente ejemplo, se ha utilizado la cláusula JOIN para unir las tablas de empleados y departamentos en department_id para filtrar los registros de empleados que viven en Nueva 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';

Utilizar expresiones comunes de tabla (CTE) o tablas temporales

Si tienes tablas con listas grandes, considera la posibilidad de utilizar CTEs para almacenar la lista de valores antes de realizar la consulta. Este método mejora el rendimiento y la legibilidad de las consultas.

-- 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);

Para aprender otras técnicas avanzadas de filtrado de datos, recomiendo cursar la carrera de Analista de Datos Asociado en SQL de DataCamp. También puedes consultar el curso Intermedio de SQL Server de DataCamp, que incluye un capítulo sobre expresiones comunes de tablas y otros temas avanzados. 

Conclusión

Comprender el operador SQL IN es importante para un profesional de los datos, ya que te permite filtrar y transformar los datos durante el análisis. Para mejorar tus habilidades SQL en la aplicación del operador IN, te animo a que practiques con diferentes conjuntos de datos para su análisis.

Si quieres avanzar en tus conocimientos de SQL hasta un nivel intermedio, te recomiendo el curso Informes en SQL para explorar otras técnicas de consulta complejas. Además, la Certificación de Asociado en SQL te ayudará a destacar entre otros analistas de datos demostrando tus conocimientos prácticos sobre el uso de SQL para análisis avanzados.

Preguntas frecuentes

¿Puedo utilizar el operador IN para filtrar distintos tipos de datos?

El operador IN filtra distintos tipos de datos SQL, como cadenas, números y fechas.

¿Puedes utilizar el operador IN en subconsultas?

El operador IN se utiliza en las subconsultas como método avanzado para filtrar datos de la consulta principal.

¿Cuál es la alternativa del operador IN?

La dirección EXISTS operador JOIN la cláusula y las Tablas de expresiones comunes (CTE) son las mejores alternativas para el IN operador.

¿Qué bases de datos son compatibles con el operador IN?

Las bases de datos habituales admiten el uso del operador IN incluyendo las bases de datos SQL Server, MySQL, PostgreSQL y Oracle.

Temas

Aprende SQL con DataCamp

curso

Introduction to SQL

2 hr
780.6K
Learn how to create and query relational databases using SQL in just two hours.
Ver detallesRight Arrow
Comienza el curso
Ver másRight Arrow
Relacionado

tutorial

Ejemplos y tutoriales de consultas SQL

Si quiere iniciarse en SQL, nosotros le ayudamos. En este tutorial de SQL, le presentaremos las consultas SQL, una potente herramienta que nos permite trabajar con los datos almacenados en una base de datos. Verá cómo escribir consultas SQL, aprenderá sobre
Sejal Jaiswal's photo

Sejal Jaiswal

21 min

tutorial

Cómo utilizar GROUP BY y HAVING en SQL

Una guía intuitiva para descubrir los dos comandos SQL más populares para agregar filas de tu conjunto de datos
Eugenia Anello's photo

Eugenia Anello

6 min

tutorial

CALIFICAR: La sentencia de filtrado SQL que nunca supo que necesitaba

Conozca la cláusula SQL QUALIFY, un método de filtrado esencial aunque poco conocido en SQL. Comprender su sintaxis, usos y en qué se diferencia de otros métodos de filtrado SQL.
Kurtis Pykes 's photo

Kurtis Pykes

8 min

tutorial

Seleccionar varias columnas en SQL

Aprende a seleccionar fácilmente varias columnas de una tabla de base de datos en SQL, o a seleccionar todas las columnas de una tabla en una simple consulta.
DataCamp Team's photo

DataCamp Team

3 min

tutorial

FUNCIÓN SQL COUNT()

COUNT() te permite contar el número de filas que cumplen determinadas condiciones. Aprende a utilizarlo en este tutorial.
Travis Tang 's photo

Travis Tang

3 min

Ver másVer más