Búsquedas avanzadas: BETWEEN, IN y LIKE
Además de los operadores de comparación básicos, SQL ofrece operadores avanzados que hacen las búsquedas mucho más expresivas y potentes.
'The%'The Legend of Zelda'%of%'God of War'_alo'HaloBETWEEN: Rangos de valores
BETWEEN selecciona valores dentro de un rango (ambos extremos incluidos):
SELECT * FROM videogames
WHERE year BETWEEN 2010 AND 2015;IN: Lista de valores
IN permite comprobar si un valor coincide con alguno de una lista:
SELECT * FROM videogames
WHERE developer IN ('Nintendo', 'Valve', 'Bungie');LIKE: Búsqueda por patrones
LIKE permite buscar texto que coincida con un patrón. Los comodines disponibles son:
| Comodín | Descripción | Ejemplo |
|---|---|---|
% | Cualquier secuencia de caracteres | 'The%' |
_ | Un solo carácter | '_inecraft' |
SELECT * FROM videogames
WHERE title LIKE 'The%';Ejemplos prácticos
Usaremos nuestra tabla videogames:
| id | title | developer | year | playtime_hours |
|---|---|---|---|---|
| 1 | The Legend of Zelda | Nintendo | 1986 | 20 |
| 2 | Super Mario Bros. | Nintendo | 1985 | 10 |
| 3 | Final Fantasy VII | Square Enix | 1997 | 40 |
| 4 | The Witcher 3 | CD Projekt Red | 2015 | 100 |
| 5 | Minecraft | Mojang Studios | 2011 | 9999 |
| 6 | Grand Theft Auto V | Rockstar Games | 2013 | 80 |
| 7 | Dark Souls | FromSoftware | 2011 | 60 |
| 8 | Portal 2 | Valve | 2011 | 8 |
| 9 | Red Dead Redemption 2 | Rockstar Games | 2018 | 70 |
| 10 | The Last of Us | Naughty Dog | 2013 | 15 |
| 11 | Halo: Combat Evolved | Bungie | 2001 | 10 |
| 12 | God of War | Santa Monica Studio | 2018 | 25 |
Buscar dentro de un rango
Juegos publicados entre 2010 y 2015:
SELECT title, year FROM videogames
WHERE year BETWEEN 2010 AND 2015;Buscar en una lista
Juegos de desarrolladores específicos:
SELECT title, developer FROM videogames
WHERE developer IN ('Nintendo', 'Valve');Negando búsquedas: NOT
Todos los operadores que acabas de aprender tienen su versión negada con NOT. Esto te permite excluir resultados en lugar de incluirlos.
NOT BETWEEN — Excluye un rango de valores:
SELECT * FROM videogames
WHERE year NOT BETWEEN 2010 AND 2015;Devuelve los juegos publicados fuera del rango 2010–2015.
NOT IN — Excluye valores de una lista:
SELECT * FROM videogames
WHERE developer NOT IN ('Nintendo', 'Valve');Devuelve todos los juegos cuyo desarrollador no sea Nintendo ni Valve.
NOT LIKE — Excluye un patrón de texto:
SELECT * FROM videogames
WHERE title NOT LIKE 'The%';Devuelve los juegos cuyo título no empieza por “The”.
Dato sobre SQLite: En SQLite,
LIKEes insensible a mayúsculas y minúsculas por defecto para caracteres ASCII. Esto significa queWHERE title LIKE 'the%'yWHERE title LIKE 'The%'devuelven los mismos resultados. Ten esto en cuenta si alguna vez migras tus consultas a otro motor de base de datos como PostgreSQL, dondeLIKEsí distingue entre mayúsculas y minúsculas.