Saltar al contenido principal
eLearner.app
Módulo 4 · Lección 1 de 413/57 en el curso~8 min
Lecciones del módulo (1/4)

Listas y rangos: IN y BETWEEN

En los módulos anteriores filtraste con WHERE usando igualdades y comparaciones: salary > 30000, department_id = 1, hired_on >= '2020-01-01'. Pero cuando la condición se convierte en "el valor debe ser uno de estos cinco", Los OR encadenados se acumulan:

SQL
-- Heavy and fragile: adding a department means touching the query
SELECT first_name, last_name
FROM   employees
WHERE  department_id = 1
   OR  department_id = 2
   OR  department_id = 3;

SQL ofrece dos atajos para que esto sea legible.

IN — "uno de estos"

El operador IN (...) toma una lista de valores y devuelve true si el columna es igual a cualquiera de ellos:

SQL
SELECT first_name, last_name, department_id
FROM   employees
WHERE  department_id IN (1, 2, 3);

Es semánticamente idéntico al OR anterior, pero mucho más legible: se lee naturalmente como "donde department_id está en (1, 2, 3)". También funciona con cadenas y fechas:

SQL
SELECT name
FROM   departments
WHERE  city IN ('Milano', 'Roma');

También existe NOT IN (...), que hace lo contrario:

SQL
-- Employees who are NOT in Engineering or Sales:
SELECT first_name, last_name
FROM   employees
WHERE  department_id NOT IN (1, 2);

ENTRE — "entre A y B, ambos inclusive"

Cuando la condición es un rango continuo (números, fechas), en lugar de escribiendo column >= A AND column <= B tienes BETWEEN A AND B:

SQL
-- Employees with a salary between 30000 and 50000 (both inclusive):
SELECT first_name, last_name, salary
FROM   employees
WHERE  salary BETWEEN 30000 AND 50000;

BETWEEN es inclusivo en ambos puntos finales. Funciona muy bien con fechas también:

SQL
-- Everyone hired in 2020:
SELECT first_name, last_name, hired_on
FROM   employees
WHERE  hired_on BETWEEN '2020-01-01' AND '2020-12-31';

Pruébalo

Ejercicio#sql.m4.l1.e1
Intentos: 0Cargando...

Muestra el nombre (first_name), el apellido (last_name) y el salario (salario) de los empleados con un salario entre 30000 y 50000 inclusive. Tres columnas.

Cargando editor...
Mostrar pista

Utilice ENTRE 30000 Y 50000: más compacto y legible que dos comparaciones unidas por AND.

Solución disponible después de 3 intentos

Ejercicio de revisión

Ejercicio#sql.m4.l1.e2
Intentos: 0Cargando...

Enumere el nombre (first_name) y el apellido (last_name) de los empleados que trabajan en los departamentos 1, 2 o 4 (use IN). Ordenar alfabéticamente por apellido.

Cargando editor...
Mostrar pista

DONDE depart_id IN (1, 2, 4) es la versión compacta de tres OR.

Solución disponible después de 3 intentos