UD06 · Prácticas
RA3 Consulta la información almacenada en una base de datos empleando asistentes, herramientas gráficas y el lenguaje de manipulación de datos. 2 CE
- RA3.a Se han identificado las herramientas y sentencias para realizar consultas.
- RA3.b Se han realizado consultas simples sobre una tabla.
RA5 Desarrolla procedimientos almacenados evaluando y utilizando las sentencias del lenguaje incorporado en el sistema gestor de bases de datos. 1 CE
- RA5.e Se ha hecho uso de las funciones proporcionadas por el sistema gestor.
| Práctica | Tipo | Nivel | CE principales |
|---|---|---|---|
| 6.1 Primeras consultas y herramientas | Guiada | ●○○ | RA3.a, RA3.b |
| 6.2 Consultas para secretaría | Autónoma | ●●○ | RA3.b |
| 6.3 Laboratorio de valores nulos | Guiada | ●●○ | RA3.b |
| 6.4 Funciones para informes | Autónoma | ●●○ | RA3.b, RA5.e |
| 6.5 Validar datos con SQL | Reto | ●●● | RA3.b, RA5.e |
| Proyecto EduGest · UD06 | Proyecto | ●●○ | RA3.a, RA3.b |
Todas las prácticas usan el esquema de referencia EDUGEST con los datos del script 02. Antes de empezar, ejecuta en tu sesión:
ALTER SESSION SET NLS_DATE_FORMAT = 'DD/MM/YYYY';Si has modificado los datos en otras prácticas, vuelve a ejecutar los scripts 01 y 02 para que tus resultados coincidan con las soluciones.
Práctica 6.1 · Primeras consultas y herramientas
Objetivo
Conocer las herramientas de consulta (hoja de trabajo, generador de consultas, pestaña de datos) y escribir las primeras consultas sobre una tabla.
Desarrollo
Explora sin SQL. En el navegador de conexiones, despliega Tablas →
MODULO→ pestaña Datos. Usa el filtro de la parte superior (escribecod_ciclo = 'DAW'). Observa que la herramienta genera una condición SQL.Usa el generador de consultas. Abre una hoja de trabajo, clic derecho → Generador de consultas. Arrastra la tabla
PROFESOR, marcaNOMBRE,APELLIDOSyESPECIALIDAD, y añade el criterioID_DEPARTAMENTO = 1. Pasa a la pestaña SQL y copia la consulta generada. Haz una captura.Escribe y ejecuta cada consulta con
Ctrl+Intro. Comprueba que el número de filas coincide.-- 1. Todos los grupos SELECT * FROM grupo; -- 6 filas -- 2. Nombre y horas de los módulos de 2º de DAM SELECT nombre, horas FROM modulo WHERE cod_ciclo = 'DAM' AND curso = 2; -- 5 filas -- 3. Grupos de tarde SELECT cod_grupo, cod_ciclo FROM grupo WHERE turno = 'T'; -- 2 filas -- 4. Profesorado ordenado por fecha de alta, del más antiguo al más reciente SELECT nombre, apellidos, fecha_alta FROM profesor ORDER BY fecha_alta; -- 12 filasEjecuta el script completo con
F5y compara: el resultado aparece como texto en la Salida de script, como en SQLcl.Exporta un resultado. Clic derecho sobre la rejilla del resultado 4 → Exportar → formato CSV.
Comprobación
Las cuatro consultas devuelven 6, 5, 2 y 12 filas.
La consulta del generador es equivalente a
SELECT nombre, apellidos, especialidad FROM profesor WHERE id_departamento = 1;y devuelve 8 filas.Sabes explicar la diferencia entre ejecutar con
Ctrl+Introy conF5.
Práctica 6.2 · Consultas para secretaría
Objetivo
Resolver de forma autónoma consultas reales sobre una tabla combinando proyección, selección, ordenación, operadores y eliminación de duplicados.
Contexto
Secretaría necesita respuestas rápidas a preguntas del día a día. Escribe una consulta para cada una. Antes de mirar la solución, comprueba que obtienes el mismo número de filas.
Enunciado
Bloque A · Proyección y ordenación
A1. Código, nombre y horas de todos los módulos de ASIR, de más a menos horas.
🔒 Solución A1
A2. Nombre completo del profesorado en el formato «Apellidos, Nombre», ordenado alfabéticamente, con una columna llamada profesor.
🔒 Solución A2
A3. Las distintas especialidades del profesorado, sin repetir.
🔒 Solución A3
A4. Los distintos pares (ciclo, curso) que existen en la tabla de módulos.
🔒 Solución A4
Bloque B · Selección
B1. Alumnado que vive en Elche o en El Campello (nombre, apellidos y localidad).
🔒 Solución B1
B2. Módulos que tienen entre 96 y 128 horas, ambas incluidas.
🔒 Solución B2
B3. Alumnado nacido antes de 2005, del mayor al menor.
🔒 Solución B3
B4. Profesorado del departamento 1 que no tiene la especialidad «Informática».
🔒 Solución B4
B5. Módulos cuyo nombre contiene la palabra «web» (en cualquier combinación de mayúsculas).
🔒 Solución B5
B6. Matrículas en segunda convocatoria o posterior (id de matrícula, alumno, módulo, convocatoria y nota).
🔒 Solución B6
B7. Faltas justificadas de 3 horas.
🔒 Solución B7
B8. Faltas registradas en diciembre de 2025.
🔒 Solución B8
Bloque C · Valores nulos y límites
C1. Matrículas sin calificar.
🔒 Solución C1
C2. Grupos sin tutor asignado.
🔒 Solución C2
C3. Las tres matrículas con peor nota (entre las calificadas), con desempate por id_matricula.
🔒 Solución C3
C4. Los dos profesores con más antigüedad en el centro.
🔒 Solución C4
Comprobación
Cada consulta empieza con un comentario que repite la pregunta.
Ninguna consulta compara con
= NULLni usa fechas como texto.Todas las consultas que devuelven listados tienen
ORDER BY.El número de filas de cada consulta coincide con la solución.
Errores habituales
- En B4, la condición
especialidad <> 'Informática'excluye también a quien tenga la especialidad aNULL. En estos datos no hay ninguno, pero en una consulta real tendrías que decidir si incluirlos conOR especialidad IS NULL.- En B8,
fecha BETWEEN DATE '2025-12-01' AND DATE '2025-12-31'no incluiría una falta del 31 a las 10:00. En estos datos todas las fechas son a las 00:00, pero acostúmbrate al intervalo semiabierto.
Ampliación
Escribe B5 de tres formas distintas (con UPPER, con LOWER y con REGEXP_LIKE(nombre, 'web', 'i')) y comprueba que dan el mismo resultado.
Práctica 6.3 · Laboratorio de valores nulos
Objetivo
Comprender la lógica de tres valores prediciendo el resultado de consultas con NULL antes de ejecutarlas.
Desarrollo
Para cada consulta, escribe primero tu predicción del número de filas. Después ejecútala y anota el resultado real. Si no coinciden, explica por qué.
Datos de partida: ALUMNO tiene 32 filas; 3 sin grupo, 4 sin DNI, 3 sin email y 5 sin teléfono. MATRICULA tiene 143 filas, de las que 6 están sin calificar.
| # | Consulta | Tu predicción | Real |
|---|---|---|---|
| 1 | SELECT COUNT(*) FROM alumno WHERE dni = NULL; | ||
| 2 | SELECT COUNT(*) FROM alumno WHERE dni IS NULL; | ||
| 3 | SELECT COUNT(*) FROM alumno WHERE cod_grupo <> '1DAM'; | ||
| 4 | SELECT COUNT(*) FROM alumno WHERE cod_grupo <> '1DAM' OR cod_grupo IS NULL; | ||
| 5 | SELECT COUNT(*) FROM alumno WHERE email IS NULL OR telefono IS NULL; | ||
| 6 | SELECT COUNT(*) FROM matricula WHERE nota_final >= 5; | ||
| 7 | SELECT COUNT(*) FROM matricula WHERE NOT (nota_final >= 5); | ||
| 8 | SELECT COUNT(*) FROM matricula WHERE NVL(nota_final, 0) < 5; | ||
| 9 | SELECT COUNT(*) FROM alumno WHERE cod_grupo NOT IN ('1DAM', '2DAM'); | ||
| 10 | SELECT COUNT(*) FROM alumno WHERE cod_grupo NOT IN ('1DAM', NULL); |
🔒 Resultados reales y explicación
El caso 10 es una trampa clásica que aparecerá de nuevo en la UD07 con las subconsultas:
WHERE id NOT IN (SELECT ...)no devuelve nada si la subconsulta devuelve algúnNULL.
Práctica 6.4 · Funciones para informes
Objetivo
Usar las funciones de fila de Oracle para transformar y presentar los datos.
Enunciado
F1. Genera la etiqueta del casillero de cada alumno de 1DAM: inicial del nombre, punto, primer apellido en mayúsculas y el NIA entre corchetes. Ejemplo: A. FERRI [10450037].
🔒 Solución F1
F2. Para cada módulo de DAW, muestra el código, el nombre y una columna duracion con el texto «Corto» (menos de 100 horas), «Medio» (de 100 a 159) o «Largo» (160 o más).
🔒 Solución F2
F3. Para el profesorado, muestra el nombre, la fecha de alta con el formato «01/09/2009» y el número de años completos de antigüedad a fecha 1 de septiembre de 2026.
🔒 Solución F3
F4. Muestra el teléfono del alumnado de 2DAM de forma que, si no tiene, aparezca «Sin teléfono», y una columna contacto que muestre el email si existe y, si no, el teléfono.
🔒 Solución F4
F5. Nombre del día de la semana (en castellano) de cada falta de asistencia de la matrícula 10044.
🔒 Solución F5
F6. Para las matrículas del alumno 9, muestra la nota con dos decimales como texto (TO_CHAR), la nota redondeada y una columna estado con «Aprobado», «Suspenso» o «Pendiente».
🔒 Solución F6
Comprobación
F1 funciona aunque un apellido tenga tildes.
F3 calcula años completos, no la diferencia de años del calendario.
F5 muestra los días en castellano aunque tu sesión esté en inglés.
Práctica 6.5 · Validar datos con SQL
Objetivo
Usar consultas y funciones del SGBD para auditar la calidad de los datos, una tarea profesional habitual antes de migrar o explotar una base de datos.
Contexto
Jefatura sospecha que hay datos mal introducidos. Te pide un informe de calidad.
Enunciado
- Letra del DNI. La letra de un DNI es el carácter que ocupa la posición
MOD(número, 23) + 1en la cadena'TRWAGMYFPDXBNJZSQVHLCKE'. Escribe una consulta que muestre el profesorado cuyo DNI tiene la letra incorrecta. - Formato del correo. Lista el alumnado cuyo email no cumple el patrón
texto@alu.edugest.es. - NIA. Comprueba que todos los NIA tienen exactamente 8 dígitos numéricos.
- Coherencia de edades. ¿Hay alumnado menor de 16 años a fecha 15/09/2025? ¿Y mayor de 30?
- Fechas de faltas. ¿Hay faltas registradas en sábado o domingo?
- Redacta un informe con los problemas encontrados y propón, para cada uno, una restricción (UD05) o un trigger (UD09) que lo habría evitado.
Pista para el apartado 1
SELECT nombre, apellidos, dni,
SUBSTR('TRWAGMYFPDXBNJZSQVHLCKE', MOD(TO_NUMBER(SUBSTR(dni, 1, 8)), 23) + 1, 1) AS letra_correcta
FROM profesor
WHERE SUBSTR(dni, 9, 1) <> SUBSTR('TRWAGMYFPDXBNJZSQVHLCKE', MOD(TO_NUMBER(SUBSTR(dni, 1, 8)), 23) + 1, 1);Debes encontrar 2 profesores con la letra incorrecta. ¿Valdría esta consulta para un NIE (que empieza por X, Y o Z)?
Pista para el apartado 5
TO_CHAR(fecha, 'D') depende del territorio de la sesión (en unos países la semana empieza en domingo y en otros en lunes). Es más fiable TO_CHAR(fecha, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN').
Proyecto EduGest · UD06: consultas del día a día
Enunciado
Entrevista (o imagina) a tres perfiles de EduGest: secretaría, tutoría y jefatura. Para cada uno, escribe cinco preguntas que se respondan con una consulta sobre una sola tabla y resuélvelas. Cada consulta debe:
- Ir precedida de un comentario con el perfil, la pregunta y el número de filas que devuelve.
- Usar al menos una de estas técnicas:
CASE, una función de fecha, una función de texto,NVL/COALESCE,FETCH FIRST,LIKE,INoBETWEEN. - Estar ordenada cuando devuelva un listado.
Incluye también una consulta creada con el generador de consultas de SQL Developer y explica qué ha generado.
Comprobación
15 consultas, todas ejecutables sin errores.
Las técnicas indicadas aparecen al menos una vez cada una.
Las preguntas son realistas y distintas a las de la práctica 6.2.