IN, BETWEEN y LIKE
En resumen: IN comprueba si un valor está en una lista, BETWEEN si está entre dos límites, y LIKE compara una parte de un texto con un patrón con % y _.
Problema
Tres ciudades, tres OR
La empresa de mensajería del noreste y de la costa reparte en Varna, Burgas y Ruse. Necesitas los clientes de esas ciudades:
Funciona, pero con diez ciudades la condición se vuelve una línea de OR en la que es fácil olvidar una.
La idea
IN: una de la lista
IN comprueba si un valor está en una lista:
El mismo resultado, y la lista se lee de un vistazo. NOT IN es lo contrario: todo menos lo que está en la lista.
La idea
BETWEEN: entre dos límites
BETWEEN a AND b significa «de a a b», incluidos a y b:
Las fechas están en la base como texto, por ejemplo 2026-03-31. Ese texto se ordena como se ordenan las fechas, así que BETWEEN también sirve para ellas. Los pedidos del primer trimestre de 2026:
Más precisamente, para curiosos
Si la fecha también lleva hora (2026-03-31 18:20), BETWEEN '2026-01-01' AND '2026-03-31' se deja el 31 de marzo después de medianoche, porque '2026-03-31 18:20' va después de '2026-03-31'. Entonces es más seguro escribir ordered_at >= '2026-01-01' AND ordered_at < '2026-04-01'.
Pruébalo
Los pedidos abiertos
Muestra el número, la fecha y el estado de los pedidos que no están ni entregados (delivered) ni cancelados (cancelled).
Solución
SELECT id, ordered_at, status FROM orders
WHERE status NOT IN ('delivered', 'cancelled');WHERE status NOT IN ('delivered', 'cancelled'). 32 pedidos esperan: new, paid o shipped.
La idea
LIKE: por una parte del texto
LIKE compara con un patrón. En el patrón, % significa «cualquier texto, incluso ninguno» y _ significa «exactamente un carácter».
'%pan%' encuentra todo nombre que tenga «pan» en alguna parte. 'pan%' buscaría nombres que empiecen por «pan», y '%pan' los que terminen así.
Míralo
Mayúsculas y minúsculas
Busquemos «PAN BLANCO» y «TÉ DE MENTA», los dos en mayúsculas. Ejecuta:
«Pan blanco» sale, aunque está guardado con una sola mayúscula. «Té de menta» no sale. En SQLite LIKE ignora las mayúsculas, pero solo en las letras de la A a la Z. En las letras acentuadas, una É mayúscula y su é minúscula son dos caracteres distintos: en las páginas en español de este curso, una búsqueda con «TÉ» en mayúsculas no encuentra «Té de menta». Lo mismo vale para Á, Í, Ó, Ú y Ñ.
Más precisamente, para curiosos
Las bases se diferencian aquí. En PostgreSQL LIKE siempre distingue mayúsculas y minúsculas, e ILIKE no las distingue, en cualquier alfabeto. En MySQL depende del ajuste de comparación de texto (collation), y normalmente se ignoran las mayúsculas. Si una búsqueda debe funcionar en todos los alfabetos, SQLite necesita una extensión (ICU), o guardas una columna aparte con el texto en minúsculas.
Pruébalo
La leche
Muestra el nombre y el precio de los productos que tienen «leche» en el nombre.
Solución
SELECT name, price FROM products WHERE name LIKE '%leche%';WHERE name LIKE '%leche%': la leche fresca. El yogur es un producto lácteo, pero la palabra no está en su nombre. Una búsqueda encuentra el texto, no el significado.
Ejercicio
Dos tareas
1. Los pedidos del verano de 2026 (junio, julio, agosto): número, cliente y fecha.
Los pedidos entre el 1 de junio y el 31 de agosto de 2026:
Solución
SELECT id, customer_id, ordered_at FROM orders
WHERE ordered_at BETWEEN '2026-06-01' AND '2026-08-31';WHERE ordered_at BETWEEN '2026-06-01' AND '2026-08-31'. También funciona con >= y <=.
2. Los clientes cuyo nombre empieza por «M»: nombre y ciudad.
Los clientes cuyo nombre empieza por «M»:
Solución
SELECT name, city FROM customers WHERE name LIKE 'M%';WHERE name LIKE 'M%'. Maria y Martin.
Test
Ponte a prueba
Lecciones relacionadas
Sección «Lecciones relacionadas»- Se basa en: SELECT: elegir columnas · WHERE: filtrar filas
- Continúa en: NULL: sin valor · Funciones de texto · CASE y los valores que faltan · Subconsultas
- Ejercicios sobre el tema: Leer datos