Saltar al contenido
CodigoDev

10 Ejercicios resueltos de Filtrado y Ordenamiento de Resultados en MySQL

MySQL Básico
Ejercicios resueltos de Filtrado y Ordenamiento de Resultados en MySQL
lightbulb Introducción al ejercicio

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.

menu_book

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:

idnombredepartamentosalariofecha_contratacion
1Laura RuizMarketing2800.002022-03-15
2Carlos MendozaIT4200.002021-07-01
3María GómezMarketing3200.002023-05-10
4David MoralesVentas2400.002022-11-20
5Ana TorresIT3100.002023-02-18
6Marcos ToledoSoporte1950.002024-01-15
7Elena NavarroFinanzas3600.002022-09-01
8Miguel RamosIT2600.002023-11-05
9Patricia VegaRecursos Humanos2900.002021-10-12
10Sofía CastilloVentas3400.002024-03-22

Ejercicio 1: Filtrar por coincidencia exacta de texto

help_outline Problema:

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.

code Solución explicada:
sql
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

help_outline Problema:

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.

code Solución explicada:
sql
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

help_outline Problema:

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.

code Solución explicada:
sql
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

help_outline Problema:

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.

code Solución explicada:
sql
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)

help_outline Problema:

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.

code Solución explicada:
sql
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)

help_outline Problema:

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.

code Solución explicada:
sql
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)

help_outline Problema:

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.

code Solución explicada:
sql
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)

help_outline Problema:

Busca los empleados cuyos nombres comiencen con la letra M.

Pista

Utiliza LIKE con el comodín de porcentaje (%).

code Solución explicada:
sql
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

help_outline Problema:

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.

code Solución explicada:
sql
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

help_outline Problema:

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.

code Solución explicada:
sql
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)
help

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.

task_alt

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.

rocket_launch

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.

A
Autor del artículo

Alejandro Nes

calendar_today update Actualizado

Desarrollador de Software y creador de contenido educativo

Otros ejercicios prácticos recomendados

Ver todos arrow_forward