UD06 · Prácticas

Resultados de aprendizaje y criterios de evaluación
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ácticaTipoNivelCE principales
6.1 Primeras consultas y herramientasGuiada●○○RA3.a, RA3.b
6.2 Consultas para secretaríaAutónoma●●○RA3.b
6.3 Laboratorio de valores nulosGuiada●●○RA3.b
6.4 Funciones para informesAutónoma●●○RA3.b, RA5.e
6.5 Validar datos con SQLReto●●●RA3.b, RA5.e
Proyecto EduGest · UD06Proyecto●●○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

Práctica 6.1 Guiada
Duración
1 sesión
Dificultad
RA / CE
RA3: a, b
Software
Oracle 26ai · SQL Developer (o extensión de VS Code)
Entrega
p6_1.sql + captura del generador de consultas

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

  1. Explora sin SQL. En el navegador de conexiones, despliega Tablas → MODULO → pestaña Datos. Usa el filtro de la parte superior (escribe cod_ciclo = 'DAW'). Observa que la herramienta genera una condición SQL.

  2. Usa el generador de consultas. Abre una hoja de trabajo, clic derecho → Generador de consultas. Arrastra la tabla PROFESOR, marca NOMBRE, APELLIDOS y ESPECIALIDAD, y añade el criterio ID_DEPARTAMENTO = 1. Pasa a la pestaña SQL y copia la consulta generada. Haz una captura.

  3. 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 filas
  4. Ejecuta el script completo con F5 y compara: el resultado aparece como texto en la Salida de script, como en SQLcl.

  5. Exporta un resultado. Clic derecho sobre la rejilla del resultado 4 → Exportar → formato CSV.

Comprobación

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+Intro y con F5.


Práctica 6.2 · Consultas para secretaría

Práctica 6.2 Autónoma
Duración
3 sesiones
Dificultad
RA / CE
RA3: b
Software
Oracle 26ai · esquema EDUGEST
Entrega
p6_2.sql comentado

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

Contenido protegido: introduce la clave para verlo.

A2. Nombre completo del profesorado en el formato «Apellidos, Nombre», ordenado alfabéticamente, con una columna llamada profesor.

🔒 Solución A2

Contenido protegido: introduce la clave para verlo.

A3. Las distintas especialidades del profesorado, sin repetir.

🔒 Solución A3

Contenido protegido: introduce la clave para verlo.

A4. Los distintos pares (ciclo, curso) que existen en la tabla de módulos.

🔒 Solución A4

Contenido protegido: introduce la clave para verlo.

Bloque B · Selección

B1. Alumnado que vive en Elche o en El Campello (nombre, apellidos y localidad).

🔒 Solución B1

Contenido protegido: introduce la clave para verlo.

B2. Módulos que tienen entre 96 y 128 horas, ambas incluidas.

🔒 Solución B2

Contenido protegido: introduce la clave para verlo.

B3. Alumnado nacido antes de 2005, del mayor al menor.

🔒 Solución B3

Contenido protegido: introduce la clave para verlo.

B4. Profesorado del departamento 1 que no tiene la especialidad «Informática».

🔒 Solución B4

Contenido protegido: introduce la clave para verlo.

B5. Módulos cuyo nombre contiene la palabra «web» (en cualquier combinación de mayúsculas).

🔒 Solución B5

Contenido protegido: introduce la clave para verlo.

B6. Matrículas en segunda convocatoria o posterior (id de matrícula, alumno, módulo, convocatoria y nota).

🔒 Solución B6

Contenido protegido: introduce la clave para verlo.

B7. Faltas justificadas de 3 horas.

🔒 Solución B7

Contenido protegido: introduce la clave para verlo.

B8. Faltas registradas en diciembre de 2025.

🔒 Solución B8

Contenido protegido: introduce la clave para verlo.

Bloque C · Valores nulos y límites

C1. Matrículas sin calificar.

🔒 Solución C1

Contenido protegido: introduce la clave para verlo.

C2. Grupos sin tutor asignado.

🔒 Solución C2

Contenido protegido: introduce la clave para verlo.

C3. Las tres matrículas con peor nota (entre las calificadas), con desempate por id_matricula.

🔒 Solución C3

Contenido protegido: introduce la clave para verlo.

C4. Los dos profesores con más antigüedad en el centro.

🔒 Solución C4

Contenido protegido: introduce la clave para verlo.

Comprobación

Comprobación
  • Cada consulta empieza con un comentario que repite la pregunta.

  • Ninguna consulta compara con = NULL ni 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 a NULL. En estos datos no hay ninguno, pero en una consulta real tendrías que decidir si incluirlos con OR 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

Práctica 6.3 Guiada
Duración
1 sesión
Dificultad
RA / CE
RA3: b
Software
Oracle 26ai · esquema EDUGEST
Entrega
Tabla de predicciones + resultados reales

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.

#ConsultaTu predicciónReal
1SELECT COUNT(*) FROM alumno WHERE dni = NULL;
2SELECT COUNT(*) FROM alumno WHERE dni IS NULL;
3SELECT COUNT(*) FROM alumno WHERE cod_grupo <> '1DAM';
4SELECT COUNT(*) FROM alumno WHERE cod_grupo <> '1DAM' OR cod_grupo IS NULL;
5SELECT COUNT(*) FROM alumno WHERE email IS NULL OR telefono IS NULL;
6SELECT COUNT(*) FROM matricula WHERE nota_final >= 5;
7SELECT COUNT(*) FROM matricula WHERE NOT (nota_final >= 5);
8SELECT COUNT(*) FROM matricula WHERE NVL(nota_final, 0) < 5;
9SELECT COUNT(*) FROM alumno WHERE cod_grupo NOT IN ('1DAM', '2DAM');
10SELECT COUNT(*) FROM alumno WHERE cod_grupo NOT IN ('1DAM', NULL);
🔒 Resultados reales y explicación

Contenido protegido: introduce la clave para verlo.

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ún NULL.


Práctica 6.4 · Funciones para informes

Práctica 6.4 Autónoma
Duración
2 sesiones
Dificultad
RA / CE
RA3: b · RA5: e
Software
Oracle 26ai · esquema EDUGEST
Entrega
p6_4.sql comentado

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

Contenido protegido: introduce la clave para verlo.

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

Contenido protegido: introduce la clave para verlo.

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

Contenido protegido: introduce la clave para verlo.

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

Contenido protegido: introduce la clave para verlo.

F5. Nombre del día de la semana (en castellano) de cada falta de asistencia de la matrícula 10044.

🔒 Solución F5

Contenido protegido: introduce la clave para verlo.

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

Contenido protegido: introduce la clave para verlo.

Comprobación

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

Práctica 6.5 Reto
Duración
1 sesión
Dificultad
RA / CE
RA3: b · RA5: e
Software
Oracle 26ai · esquema EDUGEST
Entrega
p6_5.sql + informe de calidad de datos

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

  1. Letra del DNI. La letra de un DNI es el carácter que ocupa la posición MOD(número, 23) + 1 en la cadena 'TRWAGMYFPDXBNJZSQVHLCKE'. Escribe una consulta que muestre el profesorado cuyo DNI tiene la letra incorrecta.
  2. Formato del correo. Lista el alumnado cuyo email no cumple el patrón texto@alu.edugest.es.
  3. NIA. Comprueba que todos los NIA tienen exactamente 8 dígitos numéricos.
  4. Coherencia de edades. ¿Hay alumnado menor de 16 años a fecha 15/09/2025? ¿Y mayor de 30?
  5. Fechas de faltas. ¿Hay faltas registradas en sábado o domingo?
  6. 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

Práctica EduGest-6 Proyecto
Duración
Trabajo transversal (1 semana)
Dificultad
RA / CE
RA3: a, b
Software
Oracle 26ai · esquema EDUGEST
Entrega
edugest/05_consultas_basicas.sql

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:

  1. Ir precedida de un comentario con el perfil, la pregunta y el número de filas que devuelve.
  2. Usar al menos una de estas técnicas: CASE, una función de fecha, una función de texto, NVL/COALESCE, FETCH FIRST, LIKE, IN o BETWEEN.
  3. 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

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.