Aprende SQL

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=20152025 - year → columna antiguedad = 10. (2) Concatenación: title=Minecraft + year=2011title || ' (' || 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 MIN y MAX tambié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

videogames5 cols

Estructura

🔑idINTEGERtitleTEXTdeveloperTEXTyearINTEGERplaytime_hoursINTEGER

Datos de ejemplo (5 filas)

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

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.

sql

Usa la concatenación para mostrar una columna llamada 'info' con el formato: 'título (año)'. Por ejemplo: 'Minecraft (2011)'.

sql

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.

sql

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.

sql