¿Te gustaría repasar algunas sentencias de SQL de forma amena para entender mejor cómo funcionan las tablas, las uniones y ciertos cálculos dentro de una base de datos? ¡Sigue leyendo! A continuación, encontrarás un pequeño repaso –en forma de historias y ejemplos– que te ayudará a practicar. (Pss… Incluye de manera camuflada varias ideas que, sin duda, te servirán cuando trabajes con bases de datos similares).
1. Conociendo a Nuestros Alumnos y sus Localidades
Imagina que tienes un listado de estudiantes y quieres saber en qué localidad vive cada uno. Una posible forma de ligar estos datos es combinando la tabla de alumnos con la de localidades usando la clave común:
SELECT a.DNI,
a.Nombre,
l.NomLocalidad
FROM alumnos AS a
JOIN localidades AS l ON a.Localidad = l.CodLocalidad;
Idea: Esto te muestra los estudiantes junto con el nombre del lugar donde residen.
2. Localidades Sin Estudiantes
¿Te has preguntado qué lugares, en tu base de datos, aún no tienen ningún habitante (o alumno) asociado?
Para averiguarlo, podrías buscar aquellas localidades cuyos códigos no aparezcan en la tabla de alumnos:
SELECT l.CodLocalidad,
l.NomLocalidad
FROM localidades AS l
WHERE l.CodLocalidad NOT IN (
SELECT a.Localidad FROM alumnos AS a
);
Idea: Con esta técnica, identificas lugares sin presencia de estudiantes.
3. Cuántos Alumnos Hay por Nivel de Estudios
Supongamos que tienes distintos niveles de estudios (Secundaria, Bachillerato, Universitario, etc.). Para contar cuántos alumnos hay en cada nivel, podrías usar:
SELECT a.NivelEstudios,
COUNT(*) AS CantAlumnos
FROM alumnos AS a
GROUP BY a.NivelEstudios;
Idea: Así, sabrás cuántos estudiantes corresponden a cada nivel académico.
4. El Nivel de Estudio con Más Alumnos
¿Quieres resaltar solo aquel nivel de estudios que concentra la mayor cantidad de estudiantes? Podrías aplicar algo como esto:
SELECT TOP 1 a.NivelEstudios,
COUNT(*) AS CantAlumnos
FROM alumnos AS a
GROUP BY a.NivelEstudios
ORDER BY CantAlumnos DESC;
Idea: De un vistazo, localizas el nivel de estudios con más presencia de alumnos.
5. Niveles de Estudio con Más de 1 Alumno
Ahora, si te interesara filtrar únicamente los niveles que superan un cierto número de matriculados (en este caso, mayor a 1):
SELECT a.NivelEstudios,
COUNT(*) AS CantAlumnos
FROM alumnos AS a
GROUP BY a.NivelEstudios
HAVING COUNT(*) > 1;
Idea: De esa forma, descartas niveles con 1 o 0 estudiantes.
6. Alumnos Solo de los Niveles 11 y 22
Tal vez hay niveles que te interesan específicamente, por ejemplo los códigos 11
y 22
.
Filtrarlos es tan sencillo como:
SELECT a.NivelEstudios,
COUNT(*) AS CantAlumnos
FROM alumnos AS a
WHERE a.NivelEstudios IN ('11','22')
GROUP BY a.NivelEstudios;
Idea: A veces, solo necesitas centrar la atención en ciertos códigos concretos.
7. Alumnos de los Niveles 11 y 22 que Tengan Más de 1 Alumno
Si, además de elegir los niveles 11
y 22
, quieres quedarte únicamente con los que superen un cierto mínimo de personas (por ejemplo, 1):
SELECT a.NivelEstudios,
COUNT(*) AS CantAlumnos
FROM alumnos AS a
WHERE a.NivelEstudios IN ('11','22')
GROUP BY a.NivelEstudios
HAVING COUNT(*) > 1;
Idea: Combinas un
WHERE
para restringir niveles y unHAVING
para establecer el mínimo requerido.
8. Localidades con Más de 2 Alumnos Cuyos Nombres Empiecen por T, S o B
¿Te planteas buscar lugares con determinada inicial y cierto número de población estudiantil? Podrías hacerlo así:
SELECT l.NomLocalidad,
COUNT(a.DNI) AS NumAlumnos
FROM alumnos AS a
JOIN localidades AS l ON a.Localidad = l.CodLocalidad
WHERE l.NomLocalidad LIKE 'T%'
OR l.NomLocalidad LIKE 'S%'
OR l.NomLocalidad LIKE 'B%'
GROUP BY l.NomLocalidad
HAVING COUNT(a.DNI) > 2;
Idea: Ideal para filtrar por la primera letra de la localidad y contar su alumnado.
9. Alumnos Matriculados en un Módulo con Código X o Y (Incluyendo Notas)
Para cierto(s) módulo(s), quizá quieras ver quién está apuntado y con qué calificación:
SELECT ma.dni,
a.Nombre,
ma.notas
FROM ModulosAlumnos AS ma
JOIN alumnos AS a ON ma.dni = a.DNI
WHERE ma.modulo IN (X, Y);
Idea: Esto sirve para listar a los alumnos inscritos en dos módulos específicos.
10. Igual al Anterior pero Solo los Aprobados
Si consideramos que la nota de aprobación es mayor o igual a 5:
SELECT ma.dni,
a.Nombre,
ma.notas
FROM ModulosAlumnos AS ma
JOIN alumnos AS a ON ma.dni = a.DNI
WHERE ma.modulo IN (X, Y)
AND ma.notas >= 5;
Idea: Así filtras exclusivamente a quienes han logrado o superado la nota de corte.
11. DNI, Nombre y Nota Media de Cada Alumno en Todos sus Módulos
Para calcular el promedio de notas por alumno, podríamos agrupar por DNI y hacer la media:
SELECT a.DNI,
a.Nombre,
AVG(ma.notas) AS NotaMedia
FROM ModulosAlumnos AS ma
JOIN alumnos AS a ON ma.dni = a.DNI
GROUP BY a.DNI, a.Nombre;
Idea: Obtienes el promedio de calificaciones para cada estudiante.
12. Promedio pero Solo de los Módulos X e Y
Si deseas filtrar la media para módulos concretos:
SELECT a.DNI,
a.Nombre,
AVG(ma.notas) AS NotaMedia
FROM ModulosAlumnos AS ma
JOIN alumnos AS a ON ma.dni = a.DNI
WHERE ma.modulo IN (X, Y)
GROUP BY a.DNI, a.Nombre;
Idea: Útil para centrarse en determinados módulos.
13. Nota Media de Cada Alumno en Sus Módulos del Curso Pasado
Imagina que guardaste matrículas por año (ej. 2021, 2022, etc.). En muchas bases de datos, podrías filtrar por la fecha de matrícula:
SELECT a.DNI,
a.Nombre,
AVG(ma.notas) AS NotaMedia
FROM ModulosAlumnos AS ma
JOIN alumnos AS a ON ma.dni = a.DNI
WHERE YEAR(ma.fechaMatricula) = 2021 -- ejemplo de "curso pasado"
GROUP BY a.DNI, a.Nombre;
Idea: Ajusta el año según qué “curso” consideres “pasado”.
14. Nota Media (Solo Módulos X e Y) Igual o Mayor a 5
Para alumnos que tengan en promedio igual o superior a 5, podrías usar HAVING
:
SELECT a.DNI,
a.Nombre,
AVG(ma.notas) AS NotaMedia
FROM ModulosAlumnos AS ma
JOIN alumnos AS a ON ma.dni = a.DNI
WHERE ma.modulo IN (X, Y)
GROUP BY a.DNI, a.Nombre
HAVING AVG(ma.notas) >= 5;
Idea: Combinas filtro de módulos y mínima nota media aprobatoria.
15. Módulos Sin Ningún Alumno Matriculado
Si deseas detectar aquellos módulos sin estudiantes, podrías hacer:
SELECT m.codmodulo,
m.NomModulo
FROM modulos AS m
WHERE m.codmodulo NOT IN (
SELECT ma.modulo FROM ModulosAlumnos AS ma
);
Idea: Identifica asignaturas o módulos en los que aún no se ha matriculado nadie.
(Más Retos y Prácticas con Subconsultas)
A veces, para consultas más avanzadas, necesitarás ideas como:
- Calcular la nota media de un alumno (con DNI específico) y compararla con la de otros.
- Mostrar el promedio de cada alumno y filtrar aquellos que superen la media de un compañero concreto.
- Comparar la nota media de distintos módulos con la de un módulo específico, etc.
Aquí te dejo, muy por encima, algunas instrucciones que podrían inspirarte para practicar subconsultas. Úsalas como guía de estudio:
- Nota media de un alumno con un DNI concreto.
- Lista de alumnos con su promedio de notas.
- Solo aquellos que tienen una media mayor que la media de un alumno específico.
- Comparar la media de un módulo con la de otro módulo y así sucesivamente.
- Buscar el módulo con más alumnos y filtrar solo a los matriculados allí.
- Hallar el alumno con menos asignaturas y listar sus módulos.
- Consultar a qué alumnos no les supera ninguna nota por encima de 5.
- Averiguar quién se matriculó en todos los módulos de la escuela.
- O descubrir a los estudiantes que han cursado más módulos que la media de módulos por alumno.
- Incluso, ver en qué asignaturas todas las notas son mayores que cierta nota concreta en el módulo de “Fol”.
Existen multitud de técnicas y cada pregunta te reta a pensar en WHERE
, GROUP BY
, HAVING
, uniones entre tablas y subconsultas. ¡Eso te hará dominar la lógica de consultas y tener un mejor entendimiento de la base de datos!
Conclusión:
Este conjunto de “escenarios” (cada uno con sus pequeñas sentencias) funciona como un repaso global para comprobar cómo manejar datos relacionados con estudiantes, módulos, calificaciones y localidades. Cada consulta te servirá como base para cuestiones reales: desde listar información básica hasta calcular promedios, filtrar aprobados o buscar niveles de estudio con gran asistencia.
¡Sigue practicando, combinando y adaptando cada idea a tus necesidades! Recuerda que la clave está en comprender el porqué de cada parte de la consulta para que puedas reutilizar esas “fórmulas” en cualquier otro proyecto de bases de datos.
Tip Extra: Para un estudio más profundo, prueba a cambiar las condiciones (los “=”, “>”, “<”, “LIKE”, etc.) y date cuenta de cómo se modifica la salida. Esto te ayudará a entender mejor el motor SQL y a ser más ágil en tus desarrollos.
Contenido restringido
Comments are closed