0% encontró este documento útil (0 votos)
388 vistas9 páginas

Solucion SQL SQL 2

Este documento contiene información sobre tablas de una base de datos universitaria, incluyendo tablas de Persona, Asignatura, Alumno, Profesor y Titulación. También incluye los tipos de datos de cada campo y las relaciones entre tablas. Se pide realizar 13 consultas SQL sobre estas tablas, cada una con una pregunta específica sobre los datos.

Cargado por

Carlos martinez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
388 vistas9 páginas

Solucion SQL SQL 2

Este documento contiene información sobre tablas de una base de datos universitaria, incluyendo tablas de Persona, Asignatura, Alumno, Profesor y Titulación. También incluye los tipos de datos de cada campo y las relaciones entre tablas. Se pide realizar 13 consultas SQL sobre estas tablas, cada una con una pregunta específica sobre los datos.

Cargado por

Carlos martinez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 9

Nombre:....................................................................................

Examen Consultas SQL


1.- Partiendo de esta información

Datos de TABLAS DE LA BASE DE DATOS UNIVERSIDAD

PERSONA
Nombr DireccionNu FechaNacimient Varo
DNI Apellido Ciudad DireccionCalle Telefono
e m o n
94111111
16161616A Luis Ramírez Haro Pez 34 1/1/69 1
1
91212121
17171717A Laura Beltrán Madrid Gran Vía 23 8/8/74 0
2
91313131
18181818A Pepe Pérez Madrid Percebe 13 2/2/80 1
3
94414141
19191919A Juan Sánchez Bilbao Melancolía 7 3/3/66 1
4
94115151
20202020A Luis Jiménez Nájera Cigüeña 15 3/3/79 1
5
94116161
21212121A Rosa García Haro Alegría 16 4/4/78 0
6
Logroñ 94117171
23232323A Jorge Sáenz Luis Ulloa 17 9/9/78 1
o 7
Gutiérre Logroñ 94118181
24242424A María Avda. de la Paz 18 10/10/64 0
z o 8
Logroñ 94119191
25252525A Rosario Díaz Percebe 19 11/11/71 0
o 9
Logroñ 94120202
26262626A Elena González Percebe 20 5/5/75 0
o 0

ASIGNATURA
IdAsignatura Nombre Creditos Cuatrimestre CosteBasico IdProfesor IdTitulacion Curso
000115 Seguridad Vial 4,5 1 30,00 € P204
130113 Programación I 9 1 60,00 € P101 130110 1
130122 Análisis II 9 2 60,00 € P203 130110 2
150212 Química Física 4,5 2 70,00 € P304 150210 1
160002 Contabilidad 6 1 70,00 € P117 160000 1

PROFESOR ALUMNO
IdAlumno DNI IdAlumno DNI
P101 19191919A A010101 21212121A
P117 25252525A A020202 18181818A
P203 23232323A A030303 20202020A
P204 26262626A A040404 26262626A
P304 24242424A A121212 16161616A
A131313 17171717A
TITULACION
IdTitulacion Nombre
130110 Matemáticas
150210 Químicas
160000 Empresariales

ALUMNO_ASIGNATURA
IdAlumno IdAsignatura NumeroMatricula
A010101 150212 1
A020202 130113 1
A020202 150212 2
A030303 130113 3
A030303 150212 1
A030303 130122 2
A040404 130122 1
A121212 000115 1
A131313 160002 4

TIPOS DE DATOS

PERSONA
Campo Tipo dato Tamaño Otros
DNI Texto-Varchar2 9 Primary Key
Nombre Texto 25 Requerido - Not Null
Apellido Texto 50 Requerido - Not Null
Ciudad Texto 25
DireccionCalle Texto 50
DireccionNum Texto 3
Telefono Texto 9
FechaNacimiento Fecha/Hora Fecha corta Fecha corta
Varon Texto 1 Check (Varon In ('0','1'))

ASIGNATURA
Campo Tipo dato Tamaño Otros
IdAsignatura Texto 6 Primary Key
Nombre Texto 50 Not Null
Creditos Numérico Simple Check (Creditos In (4.5,6,7.5,9))
Cuatrimestre Texto 1 Check (Cuatrimestre In ('1','2'))
CosteBasico Numérico Simple Number(3,2)
IdProfesor Texto 4 References PROFESOR(IdProfesor)
IdTitulacion Texto 6 References TITULACION(IdTitulacion)
Curso Fecha/Hora Fecha corta Check (Curso In ('1','2','3','4'))
ALUMNO
Campo Tipo dato Tamaño Otros
IdAlumno Texto 7 Primary Key
DNI Texto 9 References PERSONA(DNI)

PROFESOR
Campo Tipo dato Tamaño Otros
IdProfesor Texto 4 Primary Key
DNI Texto 9 References PERSONA(DNI)

TITULACION
Campo Tipo dato Tamaño Otros
IdTitulacion Texto 6 Primary Key
Nombre Texto 20 Not Null - Unique

ALUMNO_ASIGNATURA
Campo Tipo dato Tamaño Otros
IdAlumno Texto 7 References ALUMNO(IdAlumno)
IdAsignatura Texto 6 References ASIGNATURA(IdAsignatura)
NumeroMatricula Numérico Entero Not Null - Check(NumeroMatricula>=1 AND NumeroMatricula<=6)
Realizar las siguientes consultas:

Primer bloque: cada respuesta correcta vale 0,2


Segundo bloque: cada respuesta correcta vale 0,4

PRIMER BLOQUE

1.- Códigos, nombres y créditos de las asignaturas.

SELECT IdAsignatura, Nombre, Creditos


FROM ASIGNATURA;

2.- Coste máximo, mínimo y medio de las asignaturas.

SELECT MAX(CosteBasico) AS MAXIMO,


MIN(CosteBasico) AS MINIMO,
AVG(CosteBasico) AS MEDIA
FROM ASIGNATURA;

3.- Cuantas ciudades y nombres distintos hay.

SELECT COUNT(Ciudad) AS CIUDADES,


COUNT(Nombre) AS NOMBRES
FROM PERSONA;

4.- Nombre y coste básico de las asignaturas de más de 4,5 créditos.

SELECT Nombre, CosteBasico


FROM ASIGNATURA
WHERE Creditos > 4.5;

5.- Nombre de las asignaturas cuyo coste está entre 25 y 35 euros.

SELECT Nombre
FROM ASIGNATURA
WHERE CosteBasico BETWEEN 25 AND 35;
o
SELECT Nombre
FROM ASIGNATURA
WHERE CosteBasico >= 25
AND CosteBasico <= 35;

6.- Mostrar el Id de los alumnos matriculados bien en la asignatura '150212'


o bien en la'130113', o en ambas.

SELECT IdAlumno
FROM ALUMNO_ASIGNATURA
WHERE IdAsignatura IN ( "150212", "130113");
o
SELECT IdAlumno
FROM ALUMNO_ASIGNATURA
WHERE IdAsignatura = "150212"
OR IdAsignatura = "130113";
7.-Nombre de las asignaturas del segundo cuatrimestre que no sean de 6
créditos.

SELECT Nombre
FROM ASIGNATURA
WHERE Cuatrimestre = "2"
AND Creditos <> 6;

8.-Mostrar el nombre de las asignaturas cuyo coste por crédito sea mayor de
8 euros.

SELECT Nombre
FROM ASIGNATURA
WHERE CosteBasico/Credito > 8;

9.-Mostrar el nombre de las personas para las que se desconoce la fecha de


nacimiento.

SELECT Nombre
FROM PERSONA
WHERE FechaNacimiento = NULL;

10.-Cual es el día siguiente al día en que nacieron las personas de la B.D.,


pon una cabezera en la columna.

SELECT DNI, FechaNacimiento + 1 AS DIA_SIGIENTE


FROM PERSONA;

11.-Listado de personas ordenadas por apellidos y nombre.

SELECT Nombre, Apellido


FROM PERSONA
ORDER BY Apellido, Nombre;

Funciones usadas en este ejercicio:

INT(valor): Convierte valor en un entero siempre que sea posible.

DateDiff(intervalo,fecha1,fecha2): Calcula el tiempo medido en intervalo de


fecha2-fecha1.

El intervalo puede ser:

"s" - segundos
"h" - horas
"d" - días
"m" - meses
"yyyy" - años. (resta los años sin tener en cuenta los meses).
Now - Devuelve la hora actual del sistema.

12.-Listado de personas mayores de 25 años ordenadas por apellidos y


nombre.

SELECT Nombre, Apellido


FROM PERSONA
WHERE INT(DateDiff("m",FechaNacimiento,Now)/12) > 25
ORDER BY Apellido, Nombre;

13.-Listado que muestre las asignaturas con su coste por crédito ordenadas
por su coste por crédito.

SELECT Nombre, (CosteBasico/Creditos) AS COSTE_CREDITO


FROM ASIGNATURA
ORDER BY (CosteBasico/Creditos);

14.-Listado de alumnos matriculados que viven en La Rioja.

SELECT Nombre, Apellido


FROM PERSONA, ALUMNO
WHERE PERSONA.DNI = ALUMNO.DNI
AND Telefono LIKE "941*";

15.-Listado de asignaturas impartidas por profesores de Logroño.

SELECT ASIGNATURA.Nombre
FROM ASIGNATURA,PROFESOR, PERSONA
WHERE ASIGNATURA.IdProfesor = PROFESOR.IdProfesor
AND PROFESOR.DNI = PERSONA.DNI
AND Telefono LIKE "941*";

16.-Listado de profesores que además son alumnos.

SELECT Nombre, Apellido


FROM PERSONA,PROFESOR, ALUMNO
WHERE PERSONA.DNI = PROFESOR.DNI
AND PERSONA.DNI = ALUMNO.DNI;

Bloque2:

1.-Nombres de los profesores que imparten por lo menos una asignatura.

SELECT distinct(PERSONA.Nombre) AS NOMBRE_PROFESOR


FROM PERSONA, PROFESOR, ASIGNATURA
WHERE PERSONA.DNI = PROFESOR.DNI
AND PROFESOR.IdProfesor = ASIGNATURA.IdProfesor;

Otra forma agrupando:


SELECT PERSONA.Nombre AS NOMBRE_PROFESOR
FROM PERSONA, PROFESOR, ASIGNATURA
WHERE PERSONA.DNI = PROFESOR.DNI
AND PROFESOR.IdProfesor = ASIGNATURA.IdProfesor
GROUP BY ASIGNATURA.IdProfesor, PERSONA.Nombre;
2.-Suma de los créditos de las asignaturas de Matemáticas.

SELECT SUM(Creditos) AS SUMA


FROM ASIGNATURA, TITULACION
WHERE ASIGNATURA.IdTitulacion = TITULACION.IdTitulacion
AND TITULACION.Nombre = "Matemáticas";

3.-¿Cual sería el coste global de cursar la titulación de Matemáticas si el


coste de cada asignatura fuera incrementado un 7%?

SELECT SUM(CosteBasico*1.07) AS NUEVO_COSTE


FROM ASIGNATURA, TITULACION
WHERE ASIGNATURA.IdTitulacion = TITULACION.IdTitulacion
AND TITULACION.Nombre = "Matemáticas";

4.-Titulaciones (nombres) en las que imparte docencia cada profesor, junto


con el nombre de cada profesor.

SELECT TITULACION.Nombre AS TITULACION_, PERSONA.Nombre AS NOMBRE_PROFESOR


FROM PERSONA, PROFESOR, ASIGNATURA, TITULACION
WHERE PROFESOR.IdProfesor = ASIGNATURA.IdProfesor
AND ASIGNATURA.IdTitulacion = TITULACION.IdTitulacion
AND PERSONA.DNI = PROFESOR.DNI;

5.-Listado de asignaturas que tengan más créditos que "Seguridad Vial".

SELECT ASIGNATURA.Nombre AS ASIGNATURA_


FROM ASIGNATURA
WHERE Creditos > (SELECT Creditos
FROM ASIGNATURA
WHERE Nombre = "Seguridad Vial");

Otra forma con consulta sobre tablas repetidas:


SELECT A1.Nombre AS ASIGNATURA_
FROM ASIGNATURA AS A1, ASIGNATURA AS A2
WHERE A1.Creditos > A2.Creditos
AND A2.Nombre = "Seguridad Vial";

6.-Listado de alumnos que son más viejos que el profesor de mayor edad.

SELECT Nombre&" "Apellido AS ALUMNO


FROM ALUMNO, PERSONA
WHERE PERSONA.DNI = ALUMNO.DNI
AND FechaNacimiento < (SELECT MIN(FechaNacimiento)
FROM PROFESOR, PERSONA
WHERE PROFESOR.DNI = PERSONA.DNI);

7.-Cual es el coste de la matrícula de cada titulación.

SELECT IdTitulacion, SUM(CosteBasico) AS SUM_COSTE


FROM ASIGNATURA
GROUP BY IdTitulacion;

8.-Cuantos alumnos hay matriculados en cada asignatura.


SELECT IdAsignatura, COUNT(IdAlumno) AS NUM_ALUMNOS
FROM ALUMNO_ASIGNATURA
GROUP BY IdAsignatura
ORDER BY IdAsignatura;
9.-Cuanto paga cada alumno por su matrícula.

SELECT IdAlumno, SUM(CosteBasico) AS COSTE_MATRICULA


FROM ALUMNO_ASIGNATURA, ASIGNATURA
WHERE ALUMNO_ASIGNATURA.IdAsignatura = ASIGNATURA.IdAsignatura
GROUP BY IdAlumno;

10.-Coste medio de las asignaturas de cada titulación para aquellas


titulaciones en las que el coste total de la matrícula sea mayor de 60 euros.

SELECT TITULACION.Nombre AS NOMBRE_TITULACION,


AVG(ASIGNATURA.CosteBasico) AS MEDIA_COSTE_BASICO
FROM ASIGNATURA, TITULACION
WHERE ASIGNATURA.IdTitulacion = TITULACION.IdTitulacion
GROUP BY ASIGNATURA.IdTitulacion, Titulacion.Nombre
HAVING SUM(ASIGNATURA.CosteBasico) > 60;

11.-Visualiza la asignatura con más créditos, la media de créditos, la suma de


los créditos y la titulación a la que pertenecen, para titulaciones con más de 1
asignatura.

SELECT MAX(Creditos) AS MAXIMO,


AVG(Creditos) AS MEDIA,
SUM(Creditos) AS TOTAL,
TITULACION.Nombre AS TITULACION_
FROM ASIGNATURA, TITULACION
WHERE ASIGNATURA.IdTitulacion = TITULACION.IdTitulacion
GROUP BY Titulacion.Nombre
HAVING COUNT(ASIGNATURA.Nombre) > 1;

12.-Nombre de las asignaturas de la titulación '130110' cuyo coste básico


sobrepase el coste básico promedio por asignatura en dicha titulación.

SELECT Nombre
FROM ASIGNATURA
WHERE IdTitulacion = "130110"
AND CosteBasico > (SELECT AVG(CosteBasico)
FROM ASIGNATURA
GROUP BY IdTitulacion
HAVING IdTitulacion = "130110");

13.-Lista de las asignaturas en las que no se ha matriculado nadie.

SELECT IdAsignatura
FROM ASIGNATURA
WHERE IDAsignatura NOT IN (SELECT DISTINCT(IdAsignatura)
FROM ALUMNO_ASIGNATURA);

14.-Asignaturas con más créditos que alguna de las asignaturas de


Matemáticas.
SELECT IdAsignatura AS ASIGNATURA
FROM ASIGNATURA
WHERE Creditos > (SELECT MIN(CREDITOS)
FROM ASIGNATURA, TITULACION
WHERE ASIGNATURA.IdTitulacion = TITULACION.IdTitulacion
AND TITULACION.Nombre = "Matemáticas");
15.-Listado de asignaturas cuyo coste es superior al coste medio de las
asignaturas que no pertenecen a ninguna titulación.

SELECT Nombre
FROM ASIGNATURA
WHERE COsteBasico > (SELECT AVG(CosteBasico)
FROM ASIGNATURA
WHERE IdTitulacion IS NULL);

Esta otra solución no funciona bien con los valores nulos en Access:
SELECT Nombre
FROM ASIGNATURA
WHERE COsteBasico > (SELECT AVG(CosteBasico)
FROM ASIGNATURA
WHERE IdTitulacion NOT IN (SELECT IdTitulacion
FROM TITULACION));

16.-Listado de alumnos que nacieron antes que el profesor más joven.

SELECT *
FROM PERSONA
WHERE FechaNacimiento < (SELECT MAX(FechaNacimiento)
FROM PERSONA, PROFESOR
WHERE PROFESOR.DNI = PERSONA.DNI);

17.-Listado de ciudades en las que ha nacido algún profesor y también algún


alumno.
SELECT DISTINCT(Ciudad)
FROM PERSONA, PROFESOR
WHERE PERSONA.DNI = PROFESOR.DNI
AND Ciudad IN (SELECT Ciudad
FROM PERSONA, ALUMNO
WHERE PERSONA.DNI = ALUMNO.DNI);

También podría gustarte