Saltar al contenido principal

Ejercicios SQL

Pon a prueba tus conocimientos con ejercicios prácticos. Cada ejercicio incluye descripción, pista y solución explicada.

SELECT básico

Obtén todos los usuarios

Escribe una consulta SELECT que devuelva todas las columnas de la tabla `usuarios`.

Mostrar pista

Usa SELECT * FROM usuarios

Ver esquema
usuarios (id INT, nombre TEXT, email TEXT, edad INT, ciudad TEXT)
INSERT INTO usuarios VALUES (1, 'Ana', 'ana@email.com', 28, 'Madrid'), (2, 'Carlos', 'carlos@email.com', 32, 'Barcelona'), (3, 'María', 'maria@email.com', 25, 'Valencia');
SELECT con columnas específicas

Obtén solo nombres y emails

Escribe una consulta que devuelva solo las columnas `nombre` y `email` de la tabla `usuarios`.

Mostrar pista

Especifica los nombres de las columnas separados por comas

Ver esquema
usuarios (id INT, nombre TEXT, email TEXT, edad INT, ciudad TEXT)
INSERT INTO usuarios VALUES (1, 'Ana', 'ana@email.com', 28, 'Madrid'), (2, 'Carlos', 'carlos@email.com', 32, 'Barcelona');
WHERE básico

Filtra usuarios por ciudad

Encuentra todos los usuarios que viven en 'Madrid'.

Mostrar pista

Usa WHERE ciudad = 'Madrid'

Ver esquema
usuarios (id INT, nombre TEXT, email TEXT, edad INT, ciudad TEXT)
INSERT INTO usuarios VALUES (1, 'Ana', 'ana@email.com', 28, 'Madrid'), (2, 'Carlos', 'carlos@email.com', 32, 'Barcelona'), (3, 'Laura', 'laura@email.com', 30, 'Madrid');
INSERT

Inserta un nuevo usuario

Inserta un nuevo usuario llamado 'Pedro' con email 'pedro@email.com', edad 35 y ciudad 'Sevilla'.

Mostrar pista

INSERT INTO usuarios (nombre, email, edad, ciudad) VALUES (...)

Ver esquema
usuarios (id INT, nombre TEXT, email TEXT, edad INT, ciudad TEXT)
INSERT INTO usuarios VALUES (1, 'Ana', 'ana@email.com', 28, 'Madrid');
UPDATE

Actualiza el email de un usuario

Actualiza el email del usuario con id=1 a 'ana.nuevo@email.com'.

Mostrar pista

Usa WHERE id = 1 para especificar el usuario

Ver esquema
usuarios (id INT, nombre TEXT, email TEXT)
INSERT INTO usuarios VALUES (1, 'Ana', 'ana@email.com'), (2, 'Carlos', 'carlos@email.com');
DELETE

Elimina un usuario

Elimina el usuario con id=3 de la tabla usuarios.

Mostrar pista

DELETE FROM usuarios WHERE id = 3

Ver esquema
usuarios (id INT, nombre TEXT, email TEXT)
INSERT INTO usuarios VALUES (1, 'Ana', 'ana@email.com'), (2, 'Carlos', 'carlos@email.com'), (3, 'María', 'maria@email.com');
ORDER BY

Ordena usuarios por edad

Selecciona todos los usuarios ordenados por edad de forma descendente.

Mostrar pista

ORDER BY edad DESC

Ver esquema
usuarios (id INT, nombre TEXT, email TEXT, edad INT)
INSERT INTO usuarios VALUES (1, 'Ana', 'ana@email.com', 28), (2, 'Carlos', 'carlos@email.com', 32), (3, 'María', 'maria@email.com', 25);
LIMIT

Obtén los primeros 2 usuarios

Selecciona los primeros 2 usuarios ordenados por id.

Mostrar pista

Usa LIMIT 2 al final de la consulta

Ver esquema
usuarios (id INT, nombre TEXT, email TEXT)
INSERT INTO usuarios VALUES (1, 'Ana', 'ana@email.com'), (2, 'Carlos', 'carlos@email.com'), (3, 'María', 'maria@email.com');
WHERE con AND

Filtra con múltiples condiciones

Encuentra usuarios de 'Madrid' con edad mayor o igual a 25.

Mostrar pista

WHERE ciudad = 'Madrid' AND edad >= 25

Ver esquema
usuarios (id INT, nombre TEXT, ciudad TEXT, edad INT)
INSERT INTO usuarios VALUES (1, 'Ana', 'Madrid', 28), (2, 'Carlos', 'Barcelona', 32), (3, 'Laura', 'Madrid', 22), (4, 'Pedro', 'Madrid', 30);
WHERE con OR

Filtra con condiciones alternativas

Encuentra usuarios de 'Madrid' o 'Barcelona'.

Mostrar pista

WHERE ciudad = 'Madrid' OR ciudad = 'Barcelona'

Ver esquema
usuarios (id INT, nombre TEXT, ciudad TEXT)
INSERT INTO usuarios VALUES (1, 'Ana', 'Madrid'), (2, 'Carlos', 'Barcelona'), (3, 'María', 'Valencia'), (4, 'Laura', 'Madrid');
BETWEEN

Filtra por rango de edades

Selecciona usuarios con edad entre 25 y 35 años.

Mostrar pista

WHERE edad BETWEEN 25 AND 35

Ver esquema
usuarios (id INT, nombre TEXT, edad INT)
INSERT INTO usuarios VALUES (1, 'Ana', 28), (2, 'Carlos', 32), (3, 'María', 22), (4, 'Pedro', 40);
LIKE

Busca por patrón de texto

Encuentra usuarios cuyo email termine en '@gmail.com'.

Mostrar pista

WHERE email LIKE '%@gmail.com'

Ver esquema
usuarios (id INT, nombre TEXT, email TEXT)
INSERT INTO usuarios VALUES (1, 'Ana', 'ana@gmail.com'), (2, 'Carlos', 'carlos@yahoo.com'), (3, 'María', 'maria@gmail.com');
IN

Filtra por lista de valores

Selecciona usuarios de 'Madrid', 'Barcelona' o 'Valencia'.

Mostrar pista

WHERE ciudad IN ('Madrid', 'Barcelona', 'Valencia')

Ver esquema
usuarios (id INT, nombre TEXT, ciudad TEXT)
INSERT INTO usuarios VALUES (1, 'Ana', 'Madrid'), (2, 'Carlos', 'Barcelona'), (3, 'María', 'Sevilla'), (4, 'Laura', 'Valencia');
DISTINCT

Valores únicos de una columna

Obtén las ciudades distintas de las que hay usuarios.

Mostrar pista

SELECT DISTINCT ciudad FROM usuarios

Ver esquema
usuarios (id INT, nombre TEXT, ciudad TEXT)
INSERT INTO usuarios VALUES (1, 'Ana', 'Madrid'), (2, 'Carlos', 'Barcelona'), (3, 'María', 'Madrid'), (4, 'Laura', 'Valencia');
Alias con AS

Usa alias para columnas

Selecciona nombre y email, mostrando 'Nombre' y 'Email' como títulos de columna.

Mostrar pista

SELECT nombre AS 'Nombre', email AS 'Email'

Ver esquema
usuarios (id INT, nombre TEXT, email TEXT)
INSERT INTO usuarios VALUES (1, 'Ana', 'ana@email.com'), (2, 'Carlos', 'carlos@email.com');
COUNT

Cuenta el total de usuarios

Cuenta cuántos usuarios hay en total.

Mostrar pista

SELECT COUNT(*) FROM usuarios

Ver esquema
usuarios (id INT, nombre TEXT, email TEXT)
INSERT INTO usuarios VALUES (1, 'Ana', 'ana@email.com'), (2, 'Carlos', 'carlos@email.com'), (3, 'María', 'maria@email.com');
GROUP BY básico

Cuenta usuarios por ciudad

Cuenta cuántos usuarios hay en cada ciudad.

Mostrar pista

GROUP BY ciudad

Ver esquema
usuarios (id INT, nombre TEXT, ciudad TEXT)
INSERT INTO usuarios VALUES (1, 'Ana', 'Madrid'), (2, 'Carlos', 'Barcelona'), (3, 'María', 'Madrid'), (4, 'Laura', 'Valencia');
ORDER BY + LIMIT

Top 2 usuarios más jóvenes

Obtén los 2 usuarios más jóvenes (menor edad).

Mostrar pista

ORDER BY edad ASC LIMIT 2

Ver esquema
usuarios (id INT, nombre TEXT, edad INT)
INSERT INTO usuarios VALUES (1, 'Ana', 28), (2, 'Carlos', 32), (3, 'María', 25), (4, 'Pedro', 30);
IS NULL

Encuentra valores nulos

Encuentra usuarios que no tengan email registrado (email IS NULL).

Mostrar pista

WHERE email IS NULL

Ver esquema
usuarios (id INT, nombre TEXT, email TEXT)
INSERT INTO usuarios VALUES (1, 'Ana', 'ana@email.com'), (2, 'Carlos', NULL), (3, 'María', 'maria@email.com');
Funciones de texto

Usa UPPER para mayúsculas

Muestra los nombres de usuarios en mayúsculas.

Mostrar pista

SELECT UPPER(nombre) FROM usuarios

Ver esquema
usuarios (id INT, nombre TEXT)
INSERT INTO usuarios VALUES (1, 'Ana'), (2, 'Carlos'), (3, 'María');