Operador IN en SQL

¿Qué es la cláusula IN en MySQL?

  La cláusula IN en SQL

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.

¿Cómo funciona la cláusula IN en SQL?

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.

Sintaxis Básica

sql
SELECT nombre_columna FROM nombre_tabla
WHERE nombre_columna IN (valor1, valor2, valor3, ...);
  Consideraciones Importantes

  • nombre_columna: Es el campo que deseas comparar.
  • nombre_tabla: Es la tabla de la base de datos.
  • valor1, valor2, …: Son los valores con los que se comparará la columna.

Ejemplo Básico

Imagina que tienes una tabla de empleados y deseas obtener los registros de aquellos empleados cuyos identificadores son 1, 3 o 5.

Tabla: empleados

bash
| 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:

sql
SELECT nombre, salario FROM empleados WHERE id IN (1, 3, 5);

Respuesta:

bash
| nombre          | salario |
|-----------------|---------|
| Juan Pérez      | 3000.00 |
| Pedro Rodríguez | 2700.00 |
| Luis Fernández  | 2900.00 |

Casos de Uso

1. Filtrar datos por un conjunto de valores

Si quieres seleccionar ventas de ciertas regiones, puedes usar la cláusula IN para hacerlo de manera eficiente: Tabla: ventas

bash
| 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       |
Consulta:
sql
SELECT total_venta, region FROM ventas WHERE region IN ('Norte', 'Sur');

Respuesta:

bash
| total_venta | region |
|-------------|--------|
| 100.00      | Norte  |
| 250.50      | Sur    |
| 300.75      | Norte  |
| 500.00      | Sur    |

2. Usar IN con subconsultas

Tambié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.

sql
SELECT SUM(total_venta) AS total_ventas 
FROM ventas
WHERE cliente_id IN (SELECT id FROM empleados WHERE salario > 2700);

Respuesta:

bash
| total_ventas |
|--------------|
|  650.00      |

3. Usar IN con valores numéricos y de texto

La 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:

Tabla: clientes

bash
| 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á     |
Consulta:
sql
SELECT nombre, ciudad FROM clientes WHERE ciudad IN ('Bogotá', 'Cali');

Respuesta:

bash
| nombre          | ciudad  |
|-----------------|---------|
| Juan Pérez      | Bogotá  |
| Pedro Rodríguez | Cali    |
| Ana Martínez    | Bogotá  |

Casos de Uso con NOT IN


1. Excluir datos de un conjunto de valores

Si deseas seleccionar ventas que no provienen de ciertas regiones, puedes usar NOT IN para excluir valores específicos de la consulta:

Tabla: ventas

bash
| 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       |
Consulta:
sql
SELECT total_venta, region FROM ventas WHERE region NOT IN ('Norte', 'Sur');

Respuesta:

bash
| total_venta | region |
|-------------|--------|
| 150.00      | Este   |

2. Excluir datos con subconsultas

Puedes utilizar NOT IN con subconsultas. Por ejemplo, obtener el total de ventas de empleados que no ganan más de $2700:

sql
SELECT SUM(total_venta) AS total_ventas 
FROM ventas
WHERE cliente_id NOT IN (SELECT id FROM empleados WHERE salario > 2700);

Respuesta:

bash
| total_ventas |
|--------------|
|  550.00      |

3. Excluir registros de una lista de valores numéricos

Supón que deseas excluir ciertos identificadores de productos en una tabla de inventario:

Tabla: inventario

bash
| 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       |
Consulta:
sql
SELECT nombre_producto, cantidad 
FROM inventario 
WHERE id_producto NOT IN (1, 3, 5);

Respuesta:

bash
| nombre_producto  | cantidad |
|------------------|----------|
| Producto B       | 200      |
| Producto D       | 50       |

4. Excluir registros de valores de texto

En una tabla de clientes, puedes excluir aquellos clientes de ciertas ciudades:

Tabla: clientes

bash
| 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á     |
Consulta:
sql
SELECT nombre, ciudad FROM clientes WHERE ciudad NOT IN ('Bogotá', 'Cali');

Respuesta:

bash
| nombre          | ciudad   |
|-----------------|----------|
| María González  | Medellín |

Consideraciones con NOT IN

  • NOT IN es útil cuando deseas excluir elementos de una lista específica.
  • Asegúrate de que los valores NULL sean manejados adecuadamente, ya que NOT IN no considera NULL a menos que se trate explícitamente.
  Consideraciones Importantes

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.