Pregunta 1¿Cuál describe correctamente SELECT * FROM staff WHERE salary BETWEEN 5000000 AND 6000000;?
WHERE en profundidad ② — BETWEEN y LIKE para filtrado por rango y patrón
El segundo artículo de WHERE en profundidad. Cubre rangos con BETWEEN, NOT BETWEEN y coincidencias por prefijo / sufijo / contenido con LIKE — combinado con ORDER BY / LIMIT, todo ejecutándose sobre un dataset staff cargado desde CSV.
Datos que usaremos — la tabla staff
El segundo artículo de WHERE en profundidad cubre filtrado por rango (BETWEEN) y coincidencia por patrón (LIKE). Combinando las condiciones compuestas con AND / OR / NOT que viste en el artículo anterior con BETWEEN / LIKE de este artículo, podrás expresar la mayoría de los filtros de WHERE del día a día con una sola sentencia.
BETWEEN — filtrar por rango de valores
Cuando quieres comprobar si un valor cae dentro de un rango — "salary entre 5.000.000 y 6.000.000", "birthday entre abril de 2020 y marzo de 2025" — BETWEEN es el operador.
Escribir column BETWEEN value1 AND value2 devuelve filas donde la columna es al menos value1 y como mucho value2. Ten en cuenta que ambos extremos están incluidos. Significa lo mismo que column >= value1 AND column <= value2; la gente suele elegir BETWEEN solo por legibilidad.
Añadir NOT BETWEEN devuelve las filas fuera del rango (menores que value1 o mayores que value2).
-- Staff con salary entre 5.000.000 y 6.000.000 (extremos incluidos)
SELECT name, salary FROM staff
WHERE salary BETWEEN 5000000 AND 6000000;
-- Mismo significado, escrito con >= y <= unidos por AND
SELECT name, salary FROM staff
WHERE salary >= 5000000 AND salary <= 6000000;
-- Fuera del rango (menos de 5.000.000 O más de 6.000.000)
SELECT name, salary FROM staff
WHERE salary NOT BETWEEN 5000000 AND 6000000;
BETWEEN incluye ambos extremos
BETWEEN 5000000 AND 6000000 incluye exactamente 5.000.000 y exactamente 6.000.000. Si quieres excluir los extremos, escribe > 5000000 AND < 6000000.
Con fechas, puedes escribir BETWEEN '2020-04-01' AND '2025-03-31' — los literales se comparan como cadenas. Para incluir "todo marzo de 2025", definir ambos extremos con la fecha real de fin de mes es el enfoque seguro. BETWEEN '2020-04-01' AND '2025-04-01' también incluiría `2025-04-01`, lo que normalmente no es lo que quieres.
LIKE — filtrar por coincidencia de patrón
Cuando quieres filtrar por un patrón de cadena — "nombres que terminan en Tanaka", "emails que contienen @example.com" — LIKE es el operador. Escribe column LIKE 'pattern'. Dentro del patrón puedes usar los dos comodines siguientes.
| Comodín | Significado |
|---|---|
% | Coincide con cualquier cadena de cero o más caracteres ("cualquier cosa de cualquier longitud") |
_ | Coincide con exactamente un carácter ("cualquier carácter individual en esta posición") |
'A%' es empieza por A, '%a' es termina en a, '%a%' es contiene a, 'A___%' es empieza por A y tiene al menos tres caracteres más — combínalos como necesites. Añadir NOT LIKE devuelve filas que no coinciden con el patrón.
-- 1) Coincidencia por prefijo: name empieza por A
SELECT name FROM staff WHERE name LIKE 'A%';
-- 2) Coincidencia por sufijo: apellido Tanaka
SELECT name FROM staff WHERE name LIKE '%Tanaka';
-- 3) Contiene: name contiene 'a' en cualquier posición
SELECT name FROM staff WHERE name LIKE '%a%';
-- 4) Un solo carácter: el 2º carácter es 'a', el resto cualquier cosa
SELECT name FROM staff WHERE name LIKE '_a%';
-- 5) Negación: no termina en Tanaka
SELECT name FROM staff WHERE name NOT LIKE '%Tanaka';
% significa "cualquier longitud de cualquier cosa"; _ significa "exactamente un carácter". Combinar sus posiciones expresa prefijo / sufijo / contenido en tres patrones. Las líneas punteadas conectan cada patrón con sus ejemplos de coincidencia y una descripción en lenguaje natural.LIKE y `=` siguen reglas distintas de sensibilidad a mayúsculas
En la consola de este curso (SQLite), dentro de ASCII, LIKE no distingue mayúsculas de minúsculas. name LIKE '%a%' y name LIKE '%A%' devuelven las mismas filas. Para hacerlo sensible a mayúsculas, ejecuta PRAGMA case_sensitive_like = 1; o normaliza ambos lados con LOWER(...).
Mientras tanto, la comparación de cadenas con `=` (cubierta en el artículo de SELECT) sí distingue mayúsculas de minúsculas — cuidado con la diferencia de comportamiento entre = y LIKE.
Buscar `%` o `_` literales — la cláusula `ESCAPE`
Si la cadena que buscas contiene un literal % o _ (por ejemplo, un código de producto como 'A_001'), por defecto el _ se interpretará como comodín. La cláusula ESCAPE te permite especificar un carácter de escape, tras el cual % / _ se tratan como caracteres literales.
Ejemplo: WHERE code LIKE 'A\_001' ESCAPE '\'; (declara \ como carácter de escape, así que \_ se trata como guion bajo literal). El carácter de escape no tiene que ser \ — ESCAPE '#' hace que # sea el escape, ESCAPE '!' lo hace !, etc. Recurrirás a esto al buscar columnas de código que contengan _ o %.
Combinar WHERE, ORDER BY y LIMIT
Las consultas del mundo real suelen combinar filtrado (WHERE) → ordenación (ORDER BY) → límite de filas (LIMIT) en ese orden exacto. El orden de cláusulas es fijo, e intercambiarlas es un error de sintaxis.
El orden de ejecución del DB es aproximadamente FROM → WHERE → SELECT → ORDER BY → LIMIT — primero acota filas, elige las columnas que necesitas, ordénalas, luego corta la cantidad que quieres.
Verificación de conocimientos
Responde cada pregunta una a una.
Pregunta 2¿Qué nombre coincide con el patrón name LIKE '%Tanaka'?
Pregunta 3¿Cuál de las siguientes consultas tiene las cláusulas en el orden correcto?