Volver a la lista de artículos Artículos
Lectura de 8 minutos

Operador SQL IN

¿Por qué es necesario conocer el operador SQL IN? Descubre todo lo que puedes hacer con este pequeño pero potente operador.

El operador IN es una herramienta fundamental en SQL, que permite a los analistas de datos y desarrolladores filtrar y recuperar subconjuntos específicos de datos de las bases de datos. Aunque su uso básico puede parecer sencillo, dominar los matices y las aplicaciones avanzadas del operador SQL IN puede mejorar enormemente sus habilidades SQL y conducir a consultas más potentes y optimizadas.

En esta completa guía, profundizaremos en el operador SQL IN, cubriendo su sintaxis, casos de uso, consideraciones de rendimiento y mejores prácticas.

Introducción al operador SQL IN

El operador SQL IN se utiliza para comprobar si un valor coincide con cualquier valor de una lista o subconsulta especificada. Proporciona una forma concisa de combinar múltiples condiciones utilizando la lógica OR sin tener que escribir explícitamente cada condición por separado. Esto puede simplificar enormemente las consultas SQL y mejorar su legibilidad, especialmente cuando se trabaja con un gran número de condiciones.

Si buscas un punto de partida para construir unas bases SQL sólidas, te recomiendo nuestro curso SQL para principiantes . Contiene 129 ejercicios prácticos para que puedas dominar el SQL fundamental y aumentar tu confianza. Si ya conoce los fundamentos de SQL, consulte nuestro curso Ejercicio de SQL : contiene más de 1.000 ejercicios que le ayudarán a perfeccionar sus habilidades.

Uso del operador IN de SQL

Uno de los casos de uso más comunes de SQL IN es comprobar si un valor coincide con cualquier valor de una lista. He aquí un ejemplo:

SELECT *
FROM employees
WHERE department_id IN (10, 20, 30);

En esta consulta, se utiliza el operador SQL IN para recuperar todas las filas de la tabla employees donde department_id es 10, 20 ó 30.

Sintaxis del operador IN

El operador SQL IN actúa como una abreviatura para múltiples condiciones OR en el mismo campo, haciendo la consulta más concisa y legible. Esta es la sintaxis básica:

SELECT column1, column2, ...
FROM table_name
WHERE column_name IN (value1, value2, ...);

Uso del operador SQL NOT IN

El operador SQL NOT IN es lo contrario del operador SQL IN. Se utiliza para recuperar registros cuyo valor no coincide con ningún valor de la lista especificada. He aquí un ejemplo:

SELECT *
FROM products
WHERE product_category NOT IN ('Electronics', 'Clothing');

Esta consulta recupera todas las filas de la tabla products en las que product_category no es "Electrónica" ni "Ropa".

Uso de IN con SELECT

El operador SQL IN también puede utilizarse junto con una subconsulta, que es una consulta anidada dentro de otra consulta. Esta potente combinación permite filtrar datos basándose en los resultados de otra consulta. He aquí un ejemplo:

SELECT product_name, product_price
FROM products
WHERE product_id IN (
SELECT product_id FROM orders WHERE order_date >= '2023-01-01'
);

En esta consulta, la subconsulta SELECT product_id FROM orders WHERE order_date >= '2023-01-01' recupera una lista de valores product_id para los pedidos realizados a partir del 1 de enero de 2023. A continuación, la consulta principal utiliza el operador IN para recuperar los valores product_name y product_price de todos los productos cuyo product_id se encuentra en la lista devuelta por la subconsulta.

Éste es sólo un ejemplo de cómo puede utilizar una subconsulta en un operador IN. Existen numerosos tipos de subconsultas que se pueden escribir en SQL, pero para una mejor comprensión recomendamos echar un vistazo a más ejemplos de cómo utilizar una subconsulta.

Uso de NOT IN con SELECT

Al igual que en el ejemplo anterior, puede utilizar el operador NOT IN con una subconsulta para recuperar registros que no coincidan con los resultados de la subconsulta. He aquí un ejemplo:

SELECT employee_name, department_name
FROM employees
WHERE department_id NOT IN (SELECT department_id
 FROM departments
 WHERE location = 'New York');

Esta consulta recupera el nombre_empleado y el nombre_departamento de todos los empleados que no están en departamentos situados en Nueva York. La subconsulta SELECT department_id FROM departments WHERE location = 'New York' recupera una lista de valores department_id para los departamentos situados en Nueva York. A continuación, la consulta principal utiliza el operador SQL NOT IN para excluir a los empleados cuyo department_id se encuentra en la lista devuelta por la subconsulta.

Ejercicio: Desafío del Operador IN

Ahora que hemos leído sobre las diferentes formas en que se puede utilizar el operador IN para resolver problemas complejos de SQL, es hora de practicar lo que hemos aprendido.

Imagina que estás trabajando con una base de datos que almacena información sobre libros. La base de datos tiene una tabla llamada Books con las siguientes columnas BookID, Title, AuthorID, y GenreID. Hay otra tabla llamada Géneros con las columnas GenreID y GenreName. He aquí un ejemplo de algunas filas que contendrían estas tablas.

La tabla Books tabla

BookIDTitleAuthorIDGenreID
1The Hitchhiker's Guide to the Galaxy11
2Dune21
3The Lord of the Rings32
4The Da Vinci Code43
5Harry Potter and the Sorcerer’s Stone52
6The Girl on the Train63
7Pride and Prejudice74

La Genres tabla:

GenreIDGenreName
1Science Fiction
2Fantasy
3Mystery
4Romance
5Non-Fiction

Su reto consiste en escribir una consulta SQL que seleccione todos los títulos de libros que pertenezcan a los géneros "Ciencia Ficción", "Fantasía" o "Misterio". (Suponga que aún no conoce los valores de GenreID para estos géneros).

Solución:

SELECT Title
FROM Books
WHERE GenreID IN (SELECT GenreID 
  FROM Genres 
  WHERE GenreName = 'Science Fiction' 
    OR GenreName = 'Fantasy' 
    OR GenreName = 'Mystery');

Explicación:

Seleccione los títulos de los libros de la tabla Books tabla. Filtre los resultados utilizando una cláusula WHERE con el operador IN para incluir sólo las filas en las que GenreID coincida con GenreID en la tabla de Genres para "Ciencia Ficción", "Fantasía" o "Misterio".

También puede escribir una consulta que utilice dos operadores IN:

SELECT Title
FROM Books
WHERE GenreID IN (SELECT GenreID 
  FROM Genres 
  WHERE GenreName 
  IN ('Science Fiction','Fantasy','Mystery'));

Resultado:

Title
The Hitchhiker's Guide to the Galaxy
Dune
The Lord of the Rings
Harry Potter and the Sorcerer's Stone
The Da Vinci Code
The Girl on the Train

Ejemplos y casos de uso avanzados de IN

Aunque el uso básico del operador SQL IN es relativamente sencillo, su verdadera potencia reside en su capacidad para manejar escenarios complejos y casos de uso avanzados. Exploremos algunos de ellos:

Subconsultas Correlacionadas

Las subconsultas correlacionadas son subconsultas que hacen referencia a columnas de la consulta externa. Esto le permite filtrar datos basándose en criterios complejos que implican múltiples tablas y condiciones. He aquí un ejemplo:

SELECT product_name, category_name
FROM products p
JOIN categories c ON p.category_id = c.category_id
WHERE p.product_id IN (SELECT product_id
  FROM order_items oi
  WHERE oi.order_id IN (SELECT order_id
FROM orders
WHERE customer_id = 1001));

En esta consulta, la subconsulta más interna recupera los valores de order_id para un cliente específico. A continuación, la subconsulta intermedia utiliza esos valores de order_id para recuperar los valores de product_id correspondientes de la tabla order_items de la tabla. Por último, la consulta principal utiliza el operador SQL IN para recuperar los valores product_name y category_name de esos productos.

Las subconsultas correlacionadas son sólo una de las formas avanzadas de utilizar el operador IN. Para conocer en profundidad todos los tipos de subconsultas recomendamos estos 15 ejercicios de práctica de subconsultas.

Manejo de grandes listas de valores

Cuando se trabaja con grandes listas de valores, utilizar una subconsulta o una tabla temporal puede ser más eficiente que listar todos los valores en la cláusula SQL IN. Esto puede mejorar el rendimiento de la consulta y reducir el riesgo de superar los límites de longitud impuestos por el sistema de gestión de bases de datos. He aquí un ejemplo:

-- Create a temporary table with the desired values
CREATE TEMPORARY TABLE temp_values (value INT);
INSERT INTO temp_values (value) VALUES (10), (20), (30), ...;
-- Use the temporary table with the SQL IN operator
SELECT *
FROM employees
WHERE department_id IN (SELECT value FROM temp_values);

En este ejemplo, se crea una tabla temporal temp_values y se rellena con los valores deseados. A continuación, la consulta principal utiliza una subconsulta para recuperar los valores de la tabla temporal y filtrar la tabla en consecuencia. employees tabla en consecuencia.

Combinación de IN con otros operadores

El operador IN puede combinarse con otros operadores SQL, como AND y OR, para crear condiciones de filtrado más complejas. Esto le permite manejar escenarios en los que necesita filtrar datos basándose en múltiples criterios que implican diferentes operadores. He aquí un ejemplo:

SELECT *
FROM orders
WHERE order_date >= '2023-01-01'
  AND customer_id IN (SELECT customer_id
 FROM customers
 WHERE country = 'USA')
  AND total_amount > 1000;

En esta consulta, IN se utiliza en combinación con AND para filtrar pedidos en función de la fecha de pedido, el país del cliente y el importe total.

Ahora es el momento de practicar el uso de SQL IN

El operador IN es una herramienta potente y versátil que puede simplificar enormemente sus tareas de análisis de datos e informes SQL. Al comprender su sintaxis, uso avanzado, consideraciones de rendimiento y mejores prácticas, puede aprovechar IN para filtrar y recuperar eficazmente los datos relevantes de sus bases de datos, garantizando al mismo tiempo un rendimiento y mantenimiento óptimos de las consultas.

Gracias por leer nuestro artículo; esperamos que haya disfrutado conociendo las potentes funciones del operador IN de SQL. Si está empezando a utilizar SQL, consulte nuestro curso interactivo SQL para principiantes. Si es un usuario experimentado de SQL que busca práctica, consulte nuestro curso Ejercicio de SQL . ¡Feliz aprendizaje!