10 Ejercicios resueltos de Filtrado y Ordenamiento de Resultados en MySQL
Domina la extracción de datos con estos 10 ejercicios resueltos de filtrado y ordenamiento en MySQL. Aprende paso a paso a utilizar las cláusulas WHERE y ORDER BY para organizar tu información y encontrar exactamente lo que necesitas, trabajando sobre una base de datos de empleados con información de prueba lista para consultar.
Aprendizaje teórico
En el trabajo diario con bases de datos, rara vez necesitamos ver toda la información al mismo tiempo. Aquí es donde entran en juego el filtrado y el ordenamiento.
¿Qué son y para qué sirven?
El filtrado, mediante la cláusula WHERE, es como usar un colador: te permite extraer únicamente los registros que cumplen con ciertas condiciones, por ejemplo clientes de una ciudad específica o empleados con un salario determinado.
El ordenamiento, con la cláusula ORDER BY, organiza esos resultados de forma alfabética, cronológica o numérica, como mostrar los salarios del más alto al más bajo.
¿Cómo funcionan de manera sencilla?
Ambas cláusulas se añaden a una consulta SELECT. Con WHERE condicion estableces el criterio que debe cumplirse. Con ORDER BY columna defines el criterio de presentación. Puedes usar ASC para orden ascendente (por defecto) o DESC para descendente.
Base de datos y datos de prueba para los ejercicios
Para resolver y comprobar los siguientes 10 ejercicios, trabajaremos con la tabla empleados de una empresa. Si deseas replicar los ejercicios en tu gestor (MySQL Workbench, phpMyAdmin, DBeaver o terminal), ejecuta el siguiente script para crear la tabla y cargar los datos de prueba iniciales:
-- 1. Crear la tabla empleados
CREATE TABLE IF NOT EXISTS empleados (
id INT PRIMARY KEY AUTO_INCREMENT,
nombre VARCHAR(100) NOT NULL,
departamento VARCHAR(50) NOT NULL,
salario DECIMAL(10, 2) NOT NULL,
fecha_contratacion DATE NOT NULL
);
-- 2. Insertar los datos de prueba
INSERT INTO empleados (id, nombre, departamento, salario, fecha_contratacion) VALUES
(1, 'Laura Ruiz', 'Marketing', 2800.00, '2022-03-15'),
(2, 'Carlos Mendoza', 'IT', 4200.00, '2021-07-01'),
(3, 'María Gómez', 'Marketing', 3200.00, '2023-05-10'),
(4, 'David Morales', 'Ventas', 2400.00, '2022-11-20'),
(5, 'Ana Torres', 'IT', 3100.00, '2023-02-18'),
(6, 'Marcos Toledo', 'Soporte', 1950.00, '2024-01-15'),
(7, 'Elena Navarro', 'Finanzas', 3600.00, '2022-09-01'),
(8, 'Miguel Ramos', 'IT', 2600.00, '2023-11-05'),
(9, 'Patricia Vega', 'Recursos Humanos', 2900.00, '2021-10-12'),
(10, 'Sofía Castillo', 'Ventas', 3400.00, '2024-03-22');Tabla de datos de referencia (empleados)
Esta es la información con la que trabajarás en las consultas a continuación:
| id | nombre | departamento | salario | fecha_contratacion |
|---|---|---|---|---|
| 1 | Laura Ruiz | Marketing | 2800.00 | 2022-03-15 |
| 2 | Carlos Mendoza | IT | 4200.00 | 2021-07-01 |
| 3 | María Gómez | Marketing | 3200.00 | 2023-05-10 |
| 4 | David Morales | Ventas | 2400.00 | 2022-11-20 |
| 5 | Ana Torres | IT | 3100.00 | 2023-02-18 |
| 6 | Marcos Toledo | Soporte | 1950.00 | 2024-01-15 |
| 7 | Elena Navarro | Finanzas | 3600.00 | 2022-09-01 |
| 8 | Miguel Ramos | IT | 2600.00 | 2023-11-05 |
| 9 | Patricia Vega | Recursos Humanos | 2900.00 | 2021-10-12 |
| 10 | Sofía Castillo | Ventas | 3400.00 | 2024-03-22 |
Ejercicio 1: Filtrar por coincidencia exacta de texto
Obtén una lista del personal que trabaja exclusivamente en el departamento de Marketing. Extrae el nombre y el departamento.
Pista
Utiliza WHERE seguida del nombre de la columna y el operador de igualdad (=). Escribe los textos entre comillas simples.
SELECT nombre, departamento
FROM empleados
WHERE departamento = 'Marketing';
terminal Resultado esperado:
+-------------+--------------+ | nombre | departamento | +-------------+--------------+ | Laura Ruiz | Marketing | | María Gómez | Marketing | +-------------+--------------+ 2 rows in set (0.00 sec)
Ejercicio 2: Ordenamiento numérico básico
Obtén toda la información de los empleados organizada desde el salario más bajo hasta el más alto.
Pista
Añade ORDER BY salario ASC al final de la consulta.
SELECT *
FROM empleados
ORDER BY salario ASC;
terminal Resultado esperado:
+----+----------------+------------------+---------+--------------------+ | id | nombre | departamento | salario | fecha_contratacion | +----+----------------+------------------+---------+--------------------+ | 6 | Marcos Toledo | Soporte | 1950.00 | 2024-01-15 | | 4 | David Morales | Ventas | 2400.00 | 2022-11-20 | | 8 | Miguel Ramos | IT | 2600.00 | 2023-11-05 | | 1 | Laura Ruiz | Marketing | 2800.00 | 2022-03-15 | | 9 | Patricia Vega | Recursos Humanos | 2900.00 | 2021-10-12 | | 5 | Ana Torres | IT | 3100.00 | 2023-02-18 | | 3 | María Gómez | Marketing | 3200.00 | 2023-05-10 | | 10 | Sofía Castillo | Ventas | 3400.00 | 2024-03-22 | | 7 | Elena Navarro | Finanzas | 3600.00 | 2022-09-01 | | 2 | Carlos Mendoza | IT | 4200.00 | 2021-07-01 | +----+----------------+------------------+---------+--------------------+ 10 rows in set (0.00 sec)
Ejercicio 3: Filtrar con operadores matemáticos
Busca a los empleados que ganan más de 3000.00 y muestra únicamente sus nombres y salarios.
Pista
Usa el operador mayor que (>) para comparar salario con el valor numérico.
SELECT nombre, salario
FROM empleados
WHERE salario > 3000.00;
terminal Resultado esperado:
+----------------+---------+ | nombre | salario | +----------------+---------+ | Carlos Mendoza | 4200.00 | | María Gómez | 3200.00 | | Ana Torres | 3100.00 | | Elena Navarro | 3600.00 | | Sofía Castillo | 3400.00 | +----------------+---------+ 5 rows in set (0.00 sec)
Ejercicio 4: Combinar Filtrado y Ordenamiento
Recupera el nombre y salario de los empleados de IT, ordenados desde el sueldo más alto hasta el más bajo.
Pista
Usa WHERE para filtrar y después ORDER BY salario DESC.
SELECT nombre, salario
FROM empleados
WHERE departamento = 'IT'
ORDER BY salario DESC;
terminal Resultado esperado:
+----------------+---------+ | nombre | salario | +----------------+---------+ | Carlos Mendoza | 4200.00 | | Ana Torres | 3100.00 | | Miguel Ramos | 2600.00 | +----------------+---------+ 3 rows in set (0.00 sec)
Ejercicio 5: Filtrar usando un rango (AND)
Busca empleados cuyo salario sea como mínimo 2000.00 y como máximo 3500.00.
Pista
Combina las condiciones con AND, usando mayor o igual que y menor o igual que.
SELECT nombre, salario
FROM empleados
WHERE salario >= 2000.00 AND salario <= 3500.00;
terminal Resultado esperado:
+----------------+---------+ | nombre | salario | +----------------+---------+ | Laura Ruiz | 2800.00 | | María Gómez | 3200.00 | | David Morales | 2400.00 | | Ana Torres | 3100.00 | | Miguel Ramos | 2600.00 | | Patricia Vega | 2900.00 | | Sofía Castillo | 3400.00 | +----------------+---------+ 7 rows in set (0.00 sec)
Ejercicio 6: Filtrar alternativas múltiples (OR)
Obtén todos los datos de los empleados de Ventas o Soporte.
Pista
Utiliza OR en WHERE para indicar que el registro puede pertenecer a uno u otro departamento.
SELECT *
FROM empleados
WHERE departamento = 'Ventas' OR departamento = 'Soporte';
terminal Resultado esperado:
+----+----------------+--------------+---------+--------------------+ | id | nombre | departamento | salario | fecha_contratacion | +----+----------------+--------------+---------+--------------------+ | 4 | David Morales | Ventas | 2400.00 | 2022-11-20 | | 6 | Marcos Toledo | Soporte | 1950.00 | 2024-01-15 | | 10 | Sofía Castillo | Ventas | 3400.00 | 2024-03-22 | +----+----------------+--------------+---------+--------------------+ 3 rows in set (0.00 sec)
Ejercicio 7: Filtrar usando listas (IN)
Busca a los empleados de Ventas, Soporte, Marketing o Finanzas usando una sintaxis limpia.
Pista
El operador IN permite definir una lista de valores válidos entre paréntesis.
SELECT *
FROM empleados
WHERE departamento IN ('Ventas', 'Soporte', 'Marketing', 'Finanzas');
terminal Resultado esperado:
+----+----------------+--------------+---------+--------------------+ | id | nombre | departamento | salario | fecha_contratacion | +----+----------------+--------------+---------+--------------------+ | 1 | Laura Ruiz | Marketing | 2800.00 | 2022-03-15 | | 3 | María Gómez | Marketing | 3200.00 | 2023-05-10 | | 4 | David Morales | Ventas | 2400.00 | 2022-11-20 | | 6 | Marcos Toledo | Soporte | 1950.00 | 2024-01-15 | | 7 | Elena Navarro | Finanzas | 3600.00 | 2022-09-01 | | 10 | Sofía Castillo | Ventas | 3400.00 | 2024-03-22 | +----+----------------+--------------+---------+--------------------+ 6 rows in set (0.00 sec)
Ejercicio 8: Filtrar por patrones de texto (LIKE)
Busca los empleados cuyos nombres comiencen con la letra M.
Pista
Utiliza LIKE con el comodín de porcentaje (%).
SELECT nombre, departamento
FROM empleados
WHERE nombre LIKE 'M%';
terminal Resultado esperado:
+---------------+--------------+ | nombre | departamento | +---------------+--------------+ | María Gómez | Marketing | | Marcos Toledo | Soporte | | Miguel Ramos | IT | +---------------+--------------+ 3 rows in set (0.00 sec)
Ejercicio 9: Ordenamiento por múltiples columnas
Muestra nombre y departamento, ordenando primero por departamento y después por nombre, ambos alfabéticamente.
Pista
ORDER BY permite incluir varias columnas separadas por comas.
SELECT nombre, departamento
FROM empleados
ORDER BY departamento ASC, nombre ASC;
terminal Resultado esperado:
+----------------+------------------+ | nombre | departamento | +----------------+------------------+ | Elena Navarro | Finanzas | | Ana Torres | IT | | Carlos Mendoza | IT | | Miguel Ramos | IT | | Laura Ruiz | Marketing | | María Gómez | Marketing | | Patricia Vega | Recursos Humanos | | Marcos Toledo | Soporte | | David Morales | Ventas | | Sofía Castillo | Ventas | +----------------+------------------+ 10 rows in set (0.00 sec)
Ejercicio 10: Filtrado de fechas y ordenamiento
Busca empleados contratados después del 1 de enero de 2023 y muestra primero a los incorporados más recientemente.
Pista
Usa > con la fecha en formato YYYY-MM-DD y ordena fecha_contratacion con DESC.
SELECT nombre, fecha_contratacion
FROM empleados
WHERE fecha_contratacion > '2023-01-01'
ORDER BY fecha_contratacion DESC;
terminal Resultado esperado:
+----------------+--------------------+ | nombre | fecha_contratacion | +----------------+--------------------+ | Sofía Castillo | 2024-03-22 | | Marcos Toledo | 2024-01-15 | | Miguel Ramos | 2023-11-05 | | María Gómez | 2023-05-10 | | Ana Torres | 2023-02-18 | +----------------+--------------------+ 5 rows in set (0.00 sec)
Preguntas frecuentes
¿Puedo usar ORDER BY sin utilizar un WHERE?
Sí. Si omites WHERE, MySQL toma todos los registros y los ordena según la columna indicada en ORDER BY.
¿Cuál es la diferencia exacta entre ASC y DESC?
ASC ordena de menor a mayor, de A a Z o de fechas antiguas a recientes. DESC hace lo contrario: de mayor a menor, de Z a A o de fechas recientes a antiguas.
¿Qué ocurre si ordeno una columna que contiene valores vacíos (NULL)?
En MySQL, al ordenar de forma ascendente las filas con NULL aparecen primero. Al ordenar de forma descendente aparecen al final.
Conclusión
¡Excelente trabajo! Has logrado dominar los conceptos clave de filtrado y ordenamiento en MySQL. A través de estos ejercicios resueltos, has aprendido a utilizar WHERE para aislar datos relevantes y ORDER BY para estructurar la presentación de tus resultados. Combinar estas dos herramientas te permite convertir una gran masa de datos sin forma en información útil, estructurada y fácil de analizar. Sigue practicando diferentes combinaciones de operadores lógicos para seguir mejorando tus habilidades en consultas SQL.
Sigue aprendiendo
Documentación oficial de MySQL con detalles sobre comparaciones y filtros lógicos.
Guía interactiva sobre cómo organizar los resultados de tus consultas SQL.
Sigue practicando
Otros ejercicios prácticos recomendados
10 Ejercicios resueltos de Funciones de Texto, Números y Fechas en MySQL
Domina las funciones de texto, números y fechas en MySQL con estos 10 ejercicios resueltos. Aprende a manipular cadenas, redondear decimales y calcular intervalos de tiempo paso a paso sobre una tabla de usuarios con dat...
10 Ejercicios de Consultas con SELECT en MySQL
Aprende a extraer información de bases de datos con estos 10 ejercicios resueltos de consultas con SELECT en MySQL. Domina desde la lectura básica hasta el uso de filtros y ordenamiento, paso a paso y con ejemplos prácti...
10 Ejercicios de Inserción y Actualización de Datos en MySQL
Aprende a manipular información en bases de datos con estos 10 ejercicios resueltos de inserción y actualización de datos en MySQL. Domina los comandos fundamentales a través de ejemplos prácticos, con el esquema de la t...