%DVHVGH'DWRVVROXFLyQ 1) a) 0.25 punts (SELECT nombre,dni FROM alumno) UNION (SELECT nombre, dni FROM profesor) Nota: l’opció : (SELECT nombre,dni FROM alumno UNION profesor) és incorrecta perquè alumno i professor tenen esquemes incompatibles. b) (0.25 punts) SELECT nombre, dni FROM profesor PFX WHERE NOT EXISTS (SELECT * FROM PREPARA PRX WHERE PRX.dni = PFX.dni) c) (0.25 punts) SELECT COUNT(DISTINCT EX.cod_tema) FROM examen EX d) (1 punt) SELECT TX.cod_tema, TX.titulo, AVG(EX.nota) FROM tema TX, examen EX WHERE TX.cod_tema = EX.cod_tema GROUP BY TX.cod_tema, TX.titulo HAVING count(EX.dni) > 10 Nota: si s’obliden d’enllaçar TX i EX. e) (1 punt) SELECT TX.titulo FROM tema TX, prepara PRX WHERE PRX.cod_tema = TX.cod_tema AND NOT EXISTS (SELECT * FROM profesor PFX WHERE NOT EXISTS (SELECT * FROM prepara PRY PRY.dod_tema = TX.cod_tema AND PRY.dni = PFX.dni)) f) (1 punt) SELECT AX.nombre, AX.dni FROM alumno AX, examen EX WHERE AX.dni = EX.dni AND EX.nota > 6 AND NOT EXISTS (SELECT * FROM examen EY WHERE AX.dni = EY.dni AND EY.nota <= 6) AND ALX.edad < (SELECT AVG(edad) FROM alumno) 3 %DVHVGH'DWRVVROXFLyQFRQW 2) (1 punt) CREATE ASSERTION CHECK (NOT EXISTS (SELECT * FROM TEMA TX, PREPARA PX WHERE TX.cod_tema = PX.cod_tema AND 1 >= (SELECT COUNT(*) FROM PREPARA PY WHERE PY.cod_tema = TX.cod_tema))); O bien, CREATE ASSERTION CHECK (1 < ALL (SELECT COUNT(*) FROM PREPARA GROUP BY cod_tema)); O bien, simplemente, CREATE ASSERTION CHECK (NOT EXISTS (SELECT * FROM TEMA TX WHERE 1 = (SELECT COUNT(*) FROM PREPARA PY WHERE PY.cod_tema = TX.cod_tema))); 3) a) (0.5 punts) MODIFICAR especialidad INSERTAR MODIFICAR dni MODIFICAR cod_tema MODIFICAR nota en ALUMNO en EXAMEN en EXAMEN en EXAMEN en EXAMEN 4) (0.75 punts) {PX.nombre, PX.dni | PROFESOR (PX) ∧ ¬∃AX (ALUMNO(AX) ∧ (PX.dni = AX.prof_pra ∨ PX.dni = AX.prof_teo)) ∧ ∃PRX (PREPARA(PRX) ∧ PRX.dni = PX.dni ∧ ∃PRY (PREPARA(PRY) ∧ PRY.dni = PX.dni) ∧ PRX ≠ PRY) } Nota: se puede hacer de distintas maneras, como, por ejemplo, con un paratodo. 4