Filtrando datos: WHERE y operadores
La cláusula WHERE te permite filtrar las filas que devuelve una consulta. Solo se mostrarán las filas que cumplan la condición especificada.
SELECT columnas
FROM tabla
WHERE condición;Operadores de comparación
Puedes usar los siguientes operadores en tus condiciones:
| Operador | Descripción | Ejemplo |
|---|---|---|
= | Igual a | year = 2018 |
!= | Distinto de | year != 2018 |
> | Mayor que | playtime_hours > 50 |
< | Menor que | year < 2000 |
>= | Mayor o igual que | year >= 2010 |
<= | Menor o igual que | playtime_hours <= 20 |
Filtrando con WHERE
Nuestra tabla videogames contiene estos datos:
| 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 |
Filtrar por valor exacto
Para buscar juegos de un año específico:
SELECT * FROM videogames WHERE year = 2018;Filtrar con comparaciones
Para buscar juegos con muchas horas de juego:
SELECT title, playtime_hours
FROM videogames
WHERE playtime_hours > 50;Filtrar por texto
Para filtrar por texto, usa comillas simples alrededor del valor:
SELECT * FROM videogames WHERE developer = 'Nintendo';Combinando condiciones: AND, OR y NOT
Hasta ahora hemos filtrado con una sola condición, pero en la práctica necesitarás combinar varias. Para eso existen los operadores lógicos.
AND: ambas condiciones deben cumplirse
AND devuelve solo las filas que cumplen todas las condiciones a la vez:
SELECT * FROM videogames
WHERE year >= 2010 AND playtime_hours > 50;Esta consulta devuelve videojuegos publicados a partir de 2010 y que además tengan más de 50 horas de juego. Si un juego cumple solo una de las dos condiciones, no aparecerá.
OR: al menos una condición debe cumplirse
OR devuelve las filas que cumplen al menos una de las condiciones:
SELECT * FROM videogames
WHERE developer = 'Nintendo' OR developer = 'Valve';Aquí obtenemos los juegos de Nintendo o de Valve. Basta con que se cumpla una de las dos.
NOT: negar una condición
NOT invierte una condición, es decir, devuelve las filas que no la cumplen:
SELECT * FROM videogames
WHERE NOT developer = 'Nintendo';Esta consulta devuelve todos los juegos cuyo desarrollador no sea Nintendo. Visualmente, NOT intercambia qué filas pasan el filtro y cuáles no:
Paréntesis para controlar el orden
Cuando mezclas AND y OR en la misma consulta, el orden de evaluación importa. SQL evalúa AND antes que OR, lo que puede dar resultados inesperados. Usa paréntesis para dejar claro qué quieres agrupar:
SELECT * FROM videogames
WHERE (developer = 'Nintendo' OR developer = 'Valve')
AND year > 2000;Sin los paréntesis, SQL interpretaría la consulta como: “juegos de Nintendo, o juegos de Valve publicados después de 2000”, que no es lo mismo. Con los paréntesis, primero se resuelve el grupo (Nintendo OR Valve) y luego se aplica la condición del año a ambos.