Está en la página 1de 4

Prueba de Bases de Datos.

12 de Diciembre de 2012

El Instituto Informático de Pro (IIP) registra la información académica de sus alumnos mediante una base de
datos con la siguiente estructura:

Realizar las siguientes consultas SQL:

1.- Sacar un listado con los nombres de los alumnos y los nombres de las asignaturas en las que se ha
matriculado ordenado alfabéticamente por nombre del alumno y después por nombre de asignatura
SELECT alumnos.nombre,asignaturas.denominacion
FROM alumnos,matriculas,asignaturas
WHERE alumnos.cod_alu=matriculas.cod_alu
AND asignaturas.cod_asig=matriculas.cod_asig
ORDER BY 1,2;

2.- Nos hemos equivocado en el dato de la fecha de nacimiento de la alumna con apellido ‘Fontaneda’, ya
que nació el 1 de enero de 1992. Arreglar ese error poniendo la fecha correcta
UPDATE alumnos
SET fecha_nacimiento='01-01-1992'
WHERE alumnos.nombre LIKE '%Fontaneda%'

3.- Mostrar los nombres de los alumnos que nacieron el mismo día
SELECT a.nombre,b.nombre
FROM alumnos a,alumnos b
WHERE a.fecha_nacimiento=b.fecha_nacimiento
AND a.cod_alu<b.cod_alu

4.- Listado de alumnos con el número de asignaturas en las que se han matriculado
SELECT alumnos.nombre,count(*)
FROM alumnos,matriculas
WHERE alumnos.cod_alu=matriculas.cod_alu
GROUP BY alumnos.nombre
ORDER BY 2 DESC;

5.- Dinero recaudado por cada asignatura en la matricula


SELECT denominacion,sum(precio_matricula)
FROM asignaturas,matriculas
WHERE asignaturas.cod_asig=matriculas.cod_asig
GROUP BY denominacion
ORDER BY 2 DESC;
6.- Insertar una nueva asignatura de código 4: la Papiroflexia con un precio de matrícula de 100 euros y
un precio por examen de 10 euros
INSERT INTO asignaturas
(cod_asig,denominacion,precio_matricula,precio_examen)
VALUES
(4,'Papiroflexia',100,10);

7.- Realizar un listado en el que salgan TODAS las asignaturas y el número de alumnos matriculados en
cada una de ellas, ordenada de mayor a menor número de matriculas
SELECT denominacion,count(matriculas.cod_asig)
FROM asignaturas LEFT JOIN matriculas
ON asignaturas.cod_asig=matriculas.cod_asig
GROUP BY denominacion
ORDER BY 2 DESC;

8.- Cuantos exámenes ha realizado cada alumno


SELECT alumnos.nombre,count(nota)
FROM alumnos,matriculas,examenes
WHERE alumnos.cod_alu=matriculas.cod_alu
AND matriculas.cod_matr=examenes.cod_matr
GROUP BY alumnos.nombre;

9.- Dinero que debe pagar cada estudiante por los exámenes que ha realizado pero sólo deben salir en el
listado los alumnos que hayan hecho más de 5 exámenes
SELECT alumnos.nombre,sum(precio_examen),count(*)
FROM alumnos,matriculas,examenes,asignaturas
WHERE alumnos.cod_alu=matriculas.cod_alu
AND matriculas.cod_matr=examenes.cod_matr
AND asignaturas.cod_asig=matriculas.cod_asig
GROUP BY alumnos.nombre
HAVING count(*)>5

10.- Nombre del alumno que ha sacado la nota más alta en un examen
SELECT alumnos.nombre
FROM alumnos,matriculas,examenes
WHERE alumnos.cod_alu=matriculas.cod_alu
AND matriculas.cod_matr=examenes.cod_matr
AND nota=(SELECT max(nota)
FROM examenes);

11.- Nombre de alumno, asignatura y media obtenida en la asignatura


SELECT alumnos.nombre,asignaturas.denominacion,avg(nota)
FROM alumnos,matriculas,examenes,asignaturas
WHERE alumnos.cod_alu=matriculas.cod_alu
AND matriculas.cod_matr=examenes.cod_matr
AND asignaturas.cod_asig=matriculas.cod_asig
GROUP BY alumnos.nombre,asignaturas.denominacion
12.- La misma consulta que la pregunta 11 pero considerando SÓLO los exámenes en los que se ha
obtenido una nota entre 4 y 9
SELECT alumnos.nombre,asignaturas.denominacion,avg(nota)
FROM alumnos,matriculas,examenes,asignaturas
WHERE alumnos.cod_alu=matriculas.cod_alu
AND matriculas.cod_matr=examenes.cod_matr
AND asignaturas.cod_asig=matriculas.cod_asig
AND nota BETWEEN 4 AND 9
GROUP BY alumnos.nombre,asignaturas.denominacion

13.- La misma consulta que la pregunta 11 pero considerando SÓLO a aquellos alumnos que han
realizado 3 exámenes por asignatura
SELECT alumnos.nombre,asignaturas.denominacion,avg(nota)
FROM alumnos,matriculas,examenes,asignaturas
WHERE alumnos.cod_alu=matriculas.cod_alu
AND matriculas.cod_matr=examenes.cod_matr
AND asignaturas.cod_asig=matriculas.cod_asig
GROUP BY alumnos.nombre,asignaturas.denominacion
HAVING count(nota)=3;

14.- Compañeros de clase del apellidado ‘Fuertes’ (es decir, que cursan alguna asignatura con él)
SELECT DISTINCT alumnos.nombre
FROM alumnos,matriculas
WHERE matriculas.cod_alu=alumnos.cod_alu
AND matriculas.cod_asig IN(SELECT cod_asig
FROM matriculas
WHERE cod_alu=(SELECT cod_alu
FROM alumnos
WHERE nombre LIKE '%Fuertes%'))
AND alumnos.nombre NOT LIKE '%Fuertes%'

15.- Actualizar los precios de las asignaturas: las matrículas suben un 10% y los exámenes 2 euros
UPDATE asignaturas
SET precio_matricula=precio_matricula*1.1,precio_examen=precio_examen+2

16.- Borrar todos los exámenes de ‘Maria Fontaneda’


DELETE from examenes
WHERE cod_matr IN (SELECT cod_matr
FROM matriculas
WHERE cod_alu=(SELECT cod_alu
FROM alumnos
WHERE nombre='Maria Fontaneda'))

17.- Nota media de la primera evaluación de la asignatura Bases de Datos


SELECT avg(nota)
FROM examenes,matriculas,asignaturas
WHERE asignaturas.cod_asig=matriculas.cod_asig
AND examenes.cod_matr=matriculas.cod_matr
AND denominacion='Bases de Datos'
AND evaluacion=1

18.- Nombres de las asignaturas que no tienen ningún alumno matriculado


select *
from asignaturas
where cod_asig not in(SELECT cod_asig
FROM matriculas)
19.- Cuanto dinero ha pagado cada alumno en cada asignatura (matrícula+examenes)
SELECT alumnos.nombre,asignaturas.denominacion,precio_matricula+precio_examen*count(precio_examen)
FROM examenes,matriculas,asignaturas,alumnos
WHERE asignaturas.cod_asig=matriculas.cod_asig
AND examenes.cod_matr=matriculas.cod_matr
AND alumnos.cod_alu=matriculas.cod_alu
GROUP BY alumnos.nombre,asignaturas.denominacion,precio_matricula,precio_examen

20.- Borrar los exámenes de aquellas asignaturas cuyos alumnos no se han presentado a la tercera
evaluación
delete from examenes
where cod_matr not in (select cod_matr
from examenes
where evaluacion=3)

También podría gustarte