Ejercicios de Filtrado y Ordenamiento de Resultados en MySQL

Aprende a filtrar y ordenar datos con 10 ejercicios prácticos: Ejercicios resueltos de Filtrado y Ordenamiento de Resultados en MySQL

¿Alguna vez te has sentido abrumado por la enorme cantidad de datos en una tabla? ¡No estás solo! Aprender a filtrar y ordenar es como obtener un superpoder para tus bases de datos. Te permite hacer preguntas específicas y obtener respuestas claras y ordenadas. En este artículo, vamos a dejar de buscar datos a ciegas. A través de 10 ejercicios prácticos, aprenderás a usar las cláusulas WHERE y ORDER BY para convertir el caos de datos en información útil y bien estructurada. 🎯

Nuestra Base de Datos de Ejemplo: Plataforma de Cursos Online

Para que puedas practicar con ejemplos del mundo real, usaremos una base de datos simple para una plataforma de cursos. Contiene una tabla de cursos y otra de estudiantes.

Copia y pega el siguiente código en tu cliente MySQL para crear el entorno de trabajo.

Código para crear la base de datos y las tablas:

-- Creamos una base de datos para nuestro proyecto.
CREATE DATABASE plataforma_cursos_db;
USE plataforma_cursos_db;

-- Creamos la tabla que contendrá todos los cursos disponibles.
CREATE TABLE cursos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre_curso VARCHAR(255) NOT NULL,
    categoria VARCHAR(100),
    duracion_horas INT NOT NULL,
    precio DECIMAL(10, 2) NOT NULL,
    fecha_lanzamiento DATE
);

-- Creamos la tabla para registrar a los estudiantes inscritos.
CREATE TABLE estudiantes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    pais VARCHAR(50),
    email VARCHAR(100) NOT NULL UNIQUE,
    fecha_inscripcion DATE NOT NULL
);

Código para insertar datos de ejemplo:

-- Insertamos una variedad de cursos para poder filtrarlos y ordenarlos.
INSERT INTO cursos (nombre_curso, categoria, duracion_horas, precio, fecha_lanzamiento) VALUES
('Introducción a Python', 'Programación', 40, 49.99, '2023-01-10'),
('Marketing Digital para Principiantes', 'Marketing', 25, 39.99, '2023-02-15'),
('SQL para Análisis de Datos', 'Bases de Datos', 35, 79.99, '2023-03-20'),
('Diseño Gráfico con Figma', 'Diseño', 30, 59.99, '2023-04-05'),
('Fundamentos de JavaScript', 'Programación', 50, 69.99, '2023-05-12'),
('SEO: Posicionamiento en Buscadores', 'Marketing', 20, 39.99, '2023-06-18'),
('Python para Machine Learning', 'Programación', 60, 129.99, '2024-01-25');

-- Insertamos algunos estudiantes de ejemplo.
INSERT INTO estudiantes (nombre, pais, email, fecha_inscripcion) VALUES
('Carlos González', 'México', 'carlos.g@email.com', '2023-03-01'),
('Ana Fernández', 'España', 'ana.f@email.com', '2023-04-22'),
('Luisa Martínez', 'Colombia', 'luisa.m@email.com', '2023-05-10'),
('Javier Rodríguez', 'Argentina', 'javier.r@email.com', '2023-05-11'),
('Sofía López', 'España', 'sofia.l@email.com', '2023-06-30');

¡Perfecto! Ya tenemos todo listo para empezar a hacer consultas inteligentes.

Aprendizaje Teórico: Tus Herramientas para Consultas Precisas

Para filtrar y ordenar, usaremos principalmente dos cláusulas que se añaden a tus sentencias SELECT.

  • WHERE: Es el filtro. Se utiliza para extraer solo los registros que cumplen una condición específica. Piensa en ello como decirle a MySQL: «Muéstrame solo las filas donde…». Puedes usar operadores como =, >, <, <>, LIKE, IN, BETWEEN, AND y OR para crear condiciones simples o complejas.SQLSELECT columna1, columna2 FROM nombre_tabla WHERE condicion;
  • ORDER BY: Es el organizador. Se usa para ordenar los resultados basándose en una o más columnas. Por defecto, ordena de forma ascendente (ASC). Si quieres un orden descendente, debes especificarlo con DESC.SQLSELECT columna1, columna2 FROM nombre_tabla ORDER BY columna_a_ordenar ASC;

Con estos dos conceptos claros, ¡estás listo para empezar!

10 Ejercicios Resueltos de Filtrado y Ordenamiento

Para cada ejercicio, te retamos a que intentes escribir la consulta por tu cuenta. No te preocupes si no sale perfecta a la primera. ¡El objetivo es practicar! Luego, revisa la solución para comparar y aprender.

Ejercicio 1: Encontrar Cursos de una Categoría Específica

Problema: Quieres ver todos los cursos que pertenecen a la categoría ‘Programación’.

Solución:

-- Seleccionamos todas las columnas (*) de la tabla de cursos.
SELECT *
FROM cursos
-- Usamos WHERE para filtrar y mantener solo las filas donde la categoría sea 'Programación'.
WHERE categoria = 'Programación';

Ejercicio 2: Listar Cursos por Precio (del más barato al más caro)

Problema: Muestra todos los cursos disponibles, pero ordénalos por su precio, empezando por los más económicos.

Solución:

-- Seleccionamos el nombre del curso y su precio para una vista más limpia.
SELECT nombre_curso, precio
FROM cursos
-- Usamos ORDER BY sobre la columna 'precio'. ASC es el orden por defecto, pero lo añadimos para mayor claridad.
ORDER BY precio ASC;

Ejercicio 3: Buscar Cursos Largos y de Programación

Problema: Necesitas encontrar los cursos de ‘Programación’ que además tengan una duración superior a 45 horas.

Solución:

-- Seleccionamos las columnas de interés.
SELECT nombre_curso, categoria, duracion_horas
FROM cursos
-- Usamos el operador AND para combinar dos condiciones: ambas deben ser verdaderas.
WHERE categoria = 'Programación' AND duracion_horas > 45;

Ejercicio 4: Mostrar los Cursos más Recientes

Problema: Genera una lista de todos los cursos, ordenados desde el más nuevo hasta el más antiguo según su fecha de lanzamiento.

Solución:

-- Seleccionamos el nombre y la fecha de lanzamiento.
SELECT nombre_curso, fecha_lanzamiento
FROM cursos
-- Para ordenar del más nuevo al más antiguo, usamos el orden descendente (DESC).
ORDER BY fecha_lanzamiento DESC;

Ejercicio 5: Buscar Cursos por Palabra Clave en el Título

Problema: Encuentra todos los cursos que contengan la palabra ‘Python’ en su nombre.

Solución:

-- El operador LIKE es perfecto para buscar patrones en texto.
-- El símbolo '%' actúa como un comodín que representa cualquier secuencia de caracteres.
SELECT nombre_curso, categoria
FROM cursos
-- '%Python%' significa que 'Python' puede aparecer en cualquier parte del título.
WHERE nombre_curso LIKE '%Python%';

Ejercicio 6: Cursos de Marketing o Diseño

Problema: Muestra una lista de cursos que sean de la categoría ‘Marketing’ o de la categoría ‘Diseño’.

Solución:

-- Seleccionamos las columnas relevantes.
SELECT nombre_curso, categoria
FROM cursos
-- El operador IN es una forma limpia de verificar si un valor coincide con cualquiera de los valores de una lista.
WHERE categoria IN ('Marketing', 'Diseño');

Ejercicio 7: Estudiantes de España o Colombia, Ordenados por Fecha

Problema: Obtén una lista de los estudiantes que son de ‘España’ o ‘Colombia’ y ordénalos por su fecha de inscripción de más reciente a más antiguo.

Solución:

-- Seleccionamos el nombre, país y fecha de inscripción.
SELECT nombre, pais, fecha_inscripcion
FROM estudiantes
-- Filtramos por los dos países de interés.
WHERE pais IN ('España', 'Colombia')
-- Ordenamos los resultados por fecha en orden descendente.
ORDER BY fecha_inscripcion DESC;

Ejercicio 8: Cursos con Precios en un Rango Específico

Problema: Encuentra todos los cursos cuyo precio esté entre $50 y $100.

Solución:

-- Seleccionamos el nombre y el precio del curso.
SELECT nombre_curso, precio
FROM cursos
-- El operador BETWEEN es ideal para filtrar dentro de un rango (límites incluidos).
WHERE precio BETWEEN 50.00 AND 100.00;

Ejercicio 9: Ordenar Estudiantes por País y Nombre

Problema: Muestra la lista completa de estudiantes, ordenada primero alfabéticamente por país y, para los estudiantes del mismo país, ordenados alfabéticamente por nombre.

Solución:

-- Seleccionamos las columnas que queremos mostrar.
SELECT nombre, pais
FROM estudiantes
-- En ORDER BY, podemos especificar múltiples columnas. Se ordena por la primera y luego se usa la segunda para desempatar.
ORDER BY pais ASC, nombre ASC;

Ejercicio 10: Cursos que no son de Programación y son Cortos

Problema: Busca cursos que no pertenezcan a la categoría ‘Programación’ y que tengan una duración de 30 horas o menos.

Solución:

-- Seleccionamos las columnas de interés.
SELECT nombre_curso, categoria, duracion_horas
FROM cursos
-- Usamos el operador de desigualdad (<>) para excluir una categoría.
WHERE categoria <> 'Programación' AND duracion_horas <= 30;

Preguntas Frecuentes (FAQs)

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

WHERE filtra filas antes de que se realice cualquier agrupación (con GROUP BY). En cambio, HAVING se usa para filtrar grupos después de que han sido creados, y se aplica típicamente a funciones de agregación como COUNT() o SUM().

¿Puedo ordenar por una columna que no estoy seleccionando en el SELECT?

Sí, es posible. Por ejemplo, SELECT nombre_curso, precio FROM cursos ORDER BY duracion_horas; es una consulta válida. Ordenará los cursos por su duración, aunque esta no se muestre en el resultado final. Sin embargo, por claridad, suele ser una buena práctica incluir la columna de ordenamiento en el SELECT.

¿El orden de las cláusulas WHERE y ORDER BY importa?

¡Sí, es fundamental! La cláusula WHERE siempre debe ir antes de la cláusula ORDER BY en una consulta SELECT. MySQL procesa primero el filtrado y luego ordena el conjunto de resultados ya filtrado.

¡Ahora Tienes el Control de tus Datos!

¡Excelente trabajo! Has navegado por los fundamentos del filtrado y ordenamiento en MySQL. Ahora sabes cómo hacer preguntas precisas a tu base de datos y obtener exactamente los resultados que necesitas, en el orden que prefieras. Estas habilidades son la base para realizar análisis de datos, generar informes y construir aplicaciones potentes y eficientes.

Sigue practicando, combina diferentes operadores y no tengas miedo de experimentar. Cada consulta es una oportunidad para descubrir nueva información oculta en tus datos.

¿Listo para seguir aprendiendo? ¡Esto es solo el comienzo! Visita nuestro blog para explorar más tutoriales avanzados, trucos de optimización y guías completas sobre MySQL y otras tecnologías de datos. ¡Tu viaje para convertirte en un experto en datos continúa con nosotros!

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: 21