Curso
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 deNULL
y podría devolver resultados imprevistos. Este problema se debe a que los valoresNULL
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.