Aprende SQL

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.

Tabla original
Zelda1986
Mario1985
Witcher 32015
Minecraft2011
FF VII1997
GTA V2013
WHERE
year < 2000
Resultado
Zelda1986
Mario1985
FF VII1997
SELECT columnas
FROM tabla
WHERE condición;

Operadores de comparación

Puedes usar los siguientes operadores en tus condiciones:

OperadorDescripciónEjemplo
=Igual ayear = 2018
!=Distinto deyear != 2018
>Mayor queplaytime_hours > 50
<Menor queyear < 2000
>=Mayor o igual queyear >= 2010
<=Menor o igual queplaytime_hours <= 20

Filtrando con WHERE

Nuestra tabla videogames contiene estos datos:

Nombre de la Tabla: videogames
idtitledeveloperyearplaytime_hours
1The Legend of ZeldaNintendo198620
2Super Mario Bros.Nintendo198510
3Final Fantasy VIISquare Enix199740
4The Witcher 3CD Projekt Red2015100
5MinecraftMojang Studios20119999
6Grand Theft Auto VRockstar Games201380
7Dark SoulsFromSoftware201160
8Portal 2Valve20118
9Red Dead Redemption 2Rockstar Games201870
10The Last of UsNaughty Dog201315
11Halo: Combat EvolvedBungie200110
12God of WarSanta Monica Studio201825

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:

WHERE developer = 'Nintendo'
Zelda Nintendo
Mario Nintendo
FF VII Square Enix
Witcher 3 CD Projekt
GTA V Rockstar
Dark Souls From
2 filas
NOT
se invierte
WHERE NOT developer = 'Nintendo'
Zelda Nintendo
Mario Nintendo
FF VII Square Enix
Witcher 3 CD Projekt
GTA V Rockstar
Dark Souls From
4 filas

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.

Ejercicios