10 Ejercicios resueltos de Consultas con SELECT en MySQL

Domina las consultas SELECT en MySQL: 10 Ejercicios resueltos de Consultas con SELECT en MySQL

¿Listo para desbloquear el poder de tus datos? Con nuestra guía práctica, aprenderás a realizar consultas SELECT en MySQL como un experto. ¡Prepárate para practicar y dominar una de las habilidades más demandadas en el mundo de la tecnología!

Aprendizaje Teórico: La Base de Todo

Antes de sumergirnos en la práctica, es crucial entender la herramienta principal: la sentencia SELECT. En MySQL, SELECT es tu varita mágica para extraer y visualizar información de tus tablas. Su función es simple pero poderosa: le pides a la base de datos que te «seleccione» columnas específicas de una tabla, y ella te las devuelve.

La sintaxis básica es:

SQL

SELECT columna1, columna2, ... FROM nombre_tabla;

Pero eso no es todo. Podemos hacer nuestras consultas mucho más inteligentes y específicas usando cláusulas adicionales:

  • WHERE: Para filtrar registros y obtener solo los que cumplen una condición específica.
  • ORDER BY: Para ordenar los resultados en orden ascendente (ASC) o descendente (DESC).
  • JOIN: Para combinar filas de dos o más tablas basándose en una columna relacionada entre ellas.
  • GROUP BY: Para agrupar filas que tienen los mismos valores en columnas específicas en un resumen.
  • LIMIT: Para restringir el número de filas que devuelve la consulta.

Ahora que tienes los conceptos básicos, ¡es hora de ponerlos a prueba!

Base de Datos de Ejemplo: «EmpresaTech»

Para que puedas practicar los ejercicios en tu propio entorno, aquí tienes el código SQL completo para crear la base de datos EmpresaTech con sus tablas y datos. Simplemente copia y pega este script en tu cliente de MySQL (como MySQL Workbench, DBeaver o la terminal) y ejecútalo.

-- Borra la base de datos si ya existe para empezar desde cero
DROP DATABASE IF EXISTS EmpresaTech;

-- Crea la base de datos
CREATE DATABASE EmpresaTech;

-- Selecciona la base de datos para usarla
USE EmpresaTech;

-- Creación de la tabla 'departamentos'
CREATE TABLE departamentos (
    id INT PRIMARY KEY AUTO_INCREMENT,
    nombre VARCHAR(50) NOT NULL
);

-- Creación de la tabla 'empleados'
CREATE TABLE empleados (
    id INT PRIMARY KEY AUTO_INCREMENT,
    nombre VARCHAR(50) NOT NULL,
    apellido VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    id_departamento INT,
    salario DECIMAL(10, 2),
    fecha_contratacion DATE,
    FOREIGN KEY (id_departamento) REFERENCES departamentos(id)
);

-- Inserción de datos en la tabla 'departamentos'
INSERT INTO departamentos (id, nombre) VALUES
(1, 'Desarrollo'),
(2, 'Marketing'),
(3, 'Ventas'),
(4, 'RRHH');

-- Inserción de datos en la tabla 'empleados'
INSERT INTO empleados (id, nombre, apellido, email, id_departamento, salario, fecha_contratacion) VALUES
(1, 'Ana', 'Torres', 'ana.torres@email.com', 1, 55000.00, '2022-03-15'),
(2, 'Carlos', 'Ruiz', 'carlos.ruiz@email.com', 1, 60000.00, '2021-11-20'),
(3, 'Sofía', 'Gómez', 'sofia.gomez@email.com', 2, 48000.00, '2023-01-10'),
(4, 'Javier', 'Morales', 'javier.m@email.com', 3, 52000.00, '2022-08-01'),
(5, 'Laura', 'Díaz', 'laura.diaz@email.com', 1, 62000.00, '2020-05-25'),
(6, 'Pedro', 'Vargas', 'pedro.v@email.com', 2, 49000.00, '2023-02-28');

10 Ejercicios Resueltos de Consultas SELECT

¡Intenta Resolverlo Primero!

Para cada uno de los siguientes problemas, lee la descripción y piensa cómo construirías la consulta SQL. Escribe tu solución y luego compárala con la nuestra. ¡La práctica hace al maestro!

Ejercicio 1: Seleccionar Todos los Empleados

Problema: Obtener una lista completa con toda la información de todos los empleados registrados en la tabla empleados.

Solución:

-- El asterisco (*) es un comodín que significa "todas las columnas".
-- FROM especifica la tabla de la cual queremos obtener los datos.
SELECT * FROM empleados;

Ejercicio 2: Empleados del Departamento de Desarrollo

Problema: Necesitamos obtener el nombre, apellido y email de todos los empleados que trabajan en el departamento de «Desarrollo» (cuyo id_departamento es 1).

Solución:

-- Seleccionamos las columnas específicas que nos interesan.
-- Usamos la cláusula WHERE para filtrar los empleados por su id_departamento.
SELECT
    nombre,
    apellido,
    email
FROM
    empleados
WHERE
    id_departamento = 1;

Ejercicio 3: Empleados con Salario Mayor a 50000

Problema: Generar un listado con el nombre completo y el salario de los empleados cuyo salario sea superior a $50,000.

Solución:

-- CONCAT() es una función que une dos o más cadenas de texto.
-- Le damos un alias 'nombre_completo' a la columna resultante para mayor claridad.
SELECT
    CONCAT(nombre, ' ', apellido) AS nombre_completo,
    salario
FROM
    empleados
WHERE
    salario > 50000;

Ejercicio 4: Empleados Ordenados por Fecha de Contratación

Problema: Obtener la lista de todos los empleados, pero esta vez ordenados por su fecha de contratación, del más reciente al más antiguo.

Solución:

-- ORDER BY se usa para ordenar los resultados.
-- DESC indica que el orden será descendente (de mayor a menor).
SELECT
    nombre,
    apellido,
    fecha_contratacion
FROM
    empleados
ORDER BY
    fecha_contratacion DESC;

Ejercicio 5: Número Total de Empleados

Problema: Calcular el número total de empleados que hay en la empresa.

Solución:

-- COUNT() es una función de agregación que cuenta el número de filas.
-- Le damos un alias 'total_empleados' para identificar el resultado.
SELECT COUNT(*) AS total_empleados FROM empleados;

Ejercicio 6: Salario Promedio en el Departamento de Desarrollo

Problema: ¿Cuál es el salario promedio de los empleados que pertenecen al departamento de «Desarrollo»?

Solución:

-- AVG() calcula el valor promedio de una columna numérica.
-- Filtramos por el departamento de Desarrollo antes de hacer el cálculo.
SELECT AVG(salario) AS salario_promedio_desarrollo
FROM empleados
WHERE id_departamento = 1;

Ejercicio 7: Empleados y el Nombre de su Departamento

Problema: Mostrar el nombre, apellido y el nombre del departamento al que pertenece cada empleado.

Solución:

-- Usamos JOIN para combinar las tablas 'empleados' y 'departamentos'.
-- La condición ON especifica que la unión se hace donde los IDs de departamento coinciden.
SELECT
    e.nombre,
    e.apellido,
    d.nombre AS nombre_departamento
FROM
    empleados AS e
JOIN
    departamentos AS d ON e.id_departamento = d.id;

Ejercicio 8: Empleados Contratados en 2022

Problema: Encontrar a todos los empleados que fueron contratados durante el año 2022.

Solución:

-- La función YEAR() extrae el año de una fecha.
-- Usamos esta función en la cláusula WHERE para filtrar por el año de contratación.
SELECT
    nombre,
    apellido,
    fecha_contratacion
FROM
    empleados
WHERE
    YEAR(fecha_contratacion) = 2022;

Ejercicio 9: Departamentos con Más de 1 Empleado

Problema: Listar los departamentos que tienen más de un empleado, junto con la cantidad de empleados en cada uno. (Nota: ajustado a >1 para que coincida con los datos de ejemplo).

Solución:

-- Agrupamos los empleados por departamento usando GROUP BY.
-- HAVING se usa para filtrar grupos, en este caso, los que tienen un conteo mayor a 1.
SELECT
    d.nombre,
    COUNT(e.id) AS numero_de_empleados
FROM
    empleados AS e
JOIN
    departamentos AS d ON e.id_departamento = d.id
GROUP BY
    d.nombre
HAVING
    COUNT(e.id) > 1;

Ejercicio 10: Los 3 Empleados con Mayor Salario

Problema: Identificar a los 3 empleados con los salarios más altos de la empresa.

Solución:

-- Primero, ordenamos todos los empleados por su salario de forma descendente.
-- Luego, usamos LIMIT 3 para obtener solo las primeras 3 filas del resultado ordenado.
SELECT
    nombre,
    apellido,
    salario
FROM
    empleados
ORDER BY
    salario DESC
LIMIT 3;

Preguntas Frecuentes (FAQs)

¿Cuál es la diferencia entre WHERE y HAVING?

La cláusula WHERE se utiliza para filtrar filas antes de que se realice cualquier agrupación. En cambio, HAVING se usa para filtrar grupos después de que la cláusula GROUP BY los haya formado. WHERE trabaja con filas individuales, HAVING con el resultado de funciones de agregación (COUNT, SUM, AVG, etc.).

¿Qué es un ALIAS y por qué debería usarlo?

Un ALIAS (indicado con la palabra clave AS) es un nombre temporal que puedes darle a una columna o tabla en tu consulta. Son extremadamente útiles para hacer que los nombres de las columnas sean más descriptivos (ej. CONCAT(nombre, ' ', apellido) AS nombre_completo) y para acortar los nombres de las tablas en consultas complejas con JOINs, mejorando la legibilidad.

¿Puedo usar SELECT * en un entorno de producción?

Aunque es muy útil para explorar datos rápidamente, generalmente no se recomienda usar SELECT * en aplicaciones de producción. Es más eficiente especificar solo las columnas que necesitas. Esto reduce la cantidad de datos transferidos desde la base de datos y hace que la consulta sea más legible y mantenible.

¡Felicidades! 🎉 Has completado 10 ejercicios que te han llevado desde lo más básico hasta consultas más complejas con SELECT. Has aprendido a filtrar, ordenar, agrupar y combinar datos, habilidades fundamentales para cualquier persona que trabaje con bases de datos.

Recuerda que cada consulta que escribes es un paso más en tu camino para dominar SQL. La clave está en la práctica constante. ¡No te detengas aquí!

¿Te ha gustado este tutorial? ¡Hay mucho más por descubrir! Visita nuestro blog para encontrar más artículos, tutoriales y ejercicios que te ayudarán a convertirte en un experto en bases de datos y desarrollo. ¡Te esperamos!

No pares de aprender¡Hay mucho más esperándote! Sigue aprendiendo dentro y fuera de nuestra web.
Ejercicios de Java, Javascript, Python, PHP, MySQL y mucho más
Comparte este artículo
Alejandro Nes
Alejandro Nes

¡Hola! Soy Alejandro Nes, desarrollador web con formación en informática y apasionado por la creación de contenido educativo. Aprendamos juntos a programar :)

Artículos: 19