La cláusula IN en SQL se utiliza para especificar múltiples valores en una condición WHERE. Es una forma eficiente de buscar registros cuando deseas filtrar resultados que coincidan con una lista de valores predefinidos. En lugar de usar múltiples condiciones OR, puedes usar IN para simplificar y optimizar tu consulta.
La cláusula IN compara el valor de una columna con una lista de valores y devuelve las filas que coinciden con cualquiera de esos valores. Es especialmente útil cuando necesitas comparar un campo contra una serie de opciones.
SELECT nombre_columna FROM nombre_tabla
WHERE nombre_columna IN (valor1, valor2, valor3, ...); Imagina que tienes una tabla de empleados y deseas obtener los registros de aquellos empleados cuyos identificadores son 1, 3 o 5.
| id | nombre | salario |
|-----|-----------------|---------|
| 1 | Juan Pérez | 3000.00 |
| 2 | María González | 2500.00 |
| 3 | Pedro Rodríguez | 2700.00 |
| 4 | Ana Martínez | 3200.00 |
| 5 | Luis Fernández | 2900.00 | Consulta:
SELECT nombre, salario FROM empleados WHERE id IN (1, 3, 5); | nombre | salario |
|-----------------|---------|
| Juan Pérez | 3000.00 |
| Pedro Rodríguez | 2700.00 |
| Luis Fernández | 2900.00 | 1. Filtrar datos por un conjunto de valoresSi quieres seleccionar ventas de ciertas regiones, puedes usar la cláusula IN para hacerlo de manera eficiente: Tabla: ventas
| id | total_venta | fecha_venta | region |
|-----|-------------|---------------|-----------|
| 1 | 100.00 | 2023-01-05 | Norte |
| 2 | 250.50 | 2023-01-10 | Sur |
| 3 | 300.75 | 2023-02-15 | Norte |
| 4 | 150.00 | 2023-03-20 | Este |
| 5 | 500.00 | 2023-04-25 | Sur | SELECT total_venta, region FROM ventas WHERE region IN ('Norte', 'Sur'); | total_venta | region |
|-------------|--------|
| 100.00 | Norte |
| 250.50 | Sur |
| 300.75 | Norte |
| 500.00 | Sur | 2. Usar IN con subconsultasTambién puedes usar la cláusula IN con subconsultas. Imagina que tienes dos tablas, empleados y ventas, y quieres obtener el total de ventas de los empleados que ganan más de $2700.
SELECT SUM(total_venta) AS total_ventas
FROM ventas
WHERE cliente_id IN (SELECT id FROM empleados WHERE salario > 2700); | total_ventas |
|--------------|
| 650.00 | 3. Usar IN con valores numéricos y de textoLa cláusula IN es flexible, ya que puede manejar tanto valores numéricos como de texto. Aquí, puedes filtrar por múltiples nombres de clientes en una tabla de clientes:
| id | nombre | ciudad |
|-----|-----------------|------------|
| 1 | Juan Pérez | Bogotá |
| 2 | María González | Medellín |
| 3 | Pedro Rodríguez | Cali |
| 4 | Ana Martínez | Bogotá | SELECT nombre, ciudad FROM clientes WHERE ciudad IN ('Bogotá', 'Cali'); | nombre | ciudad |
|-----------------|---------|
| Juan Pérez | Bogotá |
| Pedro Rodríguez | Cali |
| Ana Martínez | Bogotá | NOT INSi deseas seleccionar ventas que no provienen de ciertas regiones, puedes usar NOT IN para excluir valores específicos de la consulta:
| id | total_venta | fecha_venta | region |
|-----|-------------|---------------|-----------|
| 1 | 100.00 | 2023-01-05 | Norte |
| 2 | 250.50 | 2023-01-10 | Sur |
| 3 | 300.75 | 2023-02-15 | Norte |
| 4 | 150.00 | 2023-03-20 | Este |
| 5 | 500.00 | 2023-04-25 | Sur | SELECT total_venta, region FROM ventas WHERE region NOT IN ('Norte', 'Sur'); | total_venta | region |
|-------------|--------|
| 150.00 | Este | Puedes utilizar NOT IN con subconsultas. Por ejemplo, obtener el total de ventas de empleados que no ganan más de $2700:
SELECT SUM(total_venta) AS total_ventas
FROM ventas
WHERE cliente_id NOT IN (SELECT id FROM empleados WHERE salario > 2700); | total_ventas |
|--------------|
| 550.00 | Supón que deseas excluir ciertos identificadores de productos en una tabla de inventario:
| id_producto | nombre_producto | cantidad |
|-------------|------------------|----------|
| 1 | Producto A | 100 |
| 2 | Producto B | 200 |
| 3 | Producto C | 150 |
| 4 | Producto D | 50 |
| 5 | Producto E | 75 | SELECT nombre_producto, cantidad
FROM inventario
WHERE id_producto NOT IN (1, 3, 5); | nombre_producto | cantidad |
|------------------|----------|
| Producto B | 200 |
| Producto D | 50 | En una tabla de clientes, puedes excluir aquellos clientes de ciertas ciudades:
| id | nombre | ciudad |
|-----|-----------------|------------|
| 1 | Juan Pérez | Bogotá |
| 2 | María González | Medellín |
| 3 | Pedro Rodríguez | Cali |
| 4 | Ana Martínez | Bogotá | SELECT nombre, ciudad FROM clientes WHERE ciudad NOT IN ('Bogotá', 'Cali'); | nombre | ciudad |
|-----------------|----------|
| María González | Medellín | NOT INNOT IN es útil cuando deseas excluir elementos de una lista específica.NULL sean manejados adecuadamente, ya que NOT IN no considera NULL a menos que se trate explícitamente.La cláusula IN puede manejar listas de valores largas, pero en esos casos, podría ser más eficiente usar una tabla temporal o subconsultas. Si algún valor es NULL, IN no lo considerará, a menos que se maneje explícitamente.