Expresiones en SQL: Cálculos y manipulaciones
Lección 01 · Agregación y ejecución
Expresiones en SQL: Cálculos y manipulaciones
SQL no solo recupera datos, también permite hacer cálculos, transformar texto y crear lógica condicional directamente en las consultas.
Diagramas: (1) Aritmética:
year=2015→2025 - year→ columnaantiguedad=10. (2) Concatenación:title=Minecraft+year=2011→title || ' (' || year || ')'→info=Minecraft (2011). (3) CASE WHEN:year=1986→< 2000 → 'Clásico'(activa),< 2015 → 'Moderno',ELSE → 'Reciente'→categoria=Clásico.
Operaciones aritméticas
Puedes usar operadores matemáticos en el SELECT:
SELECT title, CAST(strftime('%Y', 'now') AS INTEGER) - year AS antiguedad
FROM videogames;
Aquí strftime('%Y', 'now') devuelve el año actual como texto y CAST(... AS INTEGER) lo convierte a número para poder restarlo. Así la antigüedad se calcula siempre respecto al año en curso, sin tener que cambiar la consulta cada año.
Concatenación de texto
En SQLite, se usa || para unir cadenas de texto:
SELECT title || ' (' || year || ')' AS info
FROM videogames;
CASE WHEN: Lógica condicional
CASE WHEN permite crear columnas con valores basados en condiciones, similar a un if/else:
SELECT title,
CASE
WHEN year < 2000 THEN 'Clásico'
WHEN year < 2015 THEN 'Moderno'
ELSE 'Reciente'
END AS categoria
FROM videogames;
Alias con AS
La palabra clave AS te permite dar un nombre personalizado a una columna calculada. Ya lo hemos visto en los ejemplos anteriores.
Funciones de texto
SQL incluye funciones para transformar cadenas de texto directamente en tus consultas. Estas son las más utilizadas en SQLite:
| Función | Descripción | Ejemplo |
|---|---|---|
UPPER(texto) |
Convierte a mayúsculas | UPPER('hola') → 'HOLA' |
LOWER(texto) |
Convierte a minúsculas | LOWER('HOLA') → 'hola' |
LENGTH(texto) |
Devuelve el número de caracteres | LENGTH('Zelda') → 5 |
SUBSTR(texto, inicio, longitud) |
Extrae una parte del texto | SUBSTR('Minecraft', 1, 4) → 'Mine' |
TRIM(texto) |
Elimina espacios al inicio y al final | TRIM(' hola ') → 'hola' |
REPLACE(texto, buscar, reemplazo) |
Reemplaza ocurrencias | REPLACE('2015-03-20', '-', '/') → '2015/03/20' |
Por ejemplo, para mostrar los títulos en mayúsculas:
SELECT UPPER(title) AS titulo_mayusculas FROM videogames;
Funciones numéricas
También puedes aplicar funciones matemáticas a valores numéricos:
| Función | Descripción | Ejemplo |
|---|---|---|
ROUND(número, decimales) |
Redondea al número de decimales indicado | ROUND(3.14159, 2) → 3.14 |
ABS(número) |
Devuelve el valor absoluto | ABS(-42) → 42 |
ROUND es especialmente útil cuando haces divisiones o promedios y quieres resultados legibles:
SELECT title, ROUND(playtime_hours * 1.0 / 12, 1) AS horas_por_mes
FROM videogames;
Ten en cuenta que
MINyMAXtambién pueden usarse como funciones escalares (no solo como funciones de agregación). Por ejemplo,MIN(a, b)devuelve el menor de dos valores en una expresión.
Nuestra tabla
Nombre de la 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 |
Tablas de esta lección
Estructura
Datos de ejemplo (5 filas)
| 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 |
Ejercicios
Selecciona el título y una columna llamada 'antiguedad' que muestre cuántos años tiene el juego (año actual menos year). Usa strftime para obtener el año actual.
Usa la concatenación para mostrar una columna llamada 'info' con el formato: 'título (año)'. Por ejemplo: 'Minecraft (2011)'.
Usa CASE WHEN para crear una columna 'categoria' que clasifique: 'Clásico' si year < 2000, 'Moderno' si year < 2015, 'Reciente' en otro caso. Muestra title y categoria.
Selecciona el título, las horas de juego, y una columna 'dedicacion' que muestre 'Casual' si playtime_hours < 20, 'Normal' si es entre 20 y 60 (incluidos), o 'Hardcore' si es mayor que 60.