Ejercicios SQL
Pon a prueba tus conocimientos con ejercicios prácticos. Cada ejercicio incluye descripción, pista y solución explicada.
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');
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');
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');
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');
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');
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');
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);
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');
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);
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');
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);
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');
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');
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');
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');
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');
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');
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);
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');
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');