Вы находитесь на странице: 1из 8

UNIVERSIDAD DE EL SALVADOR

FACULTAD MULTIDISCIPLINARIA PARACENTRAL


DEPARTAMENTO DE INFORMATICA
CICLO I

ASIGNATURA:
Base de Datos

Tarea 1.
DOCENTE:

Ing. Herbert Monge


ESTUDIANTE:

Henrquez Rivas, Anderson Efran

San Vicente, 17 de Mayo de 2013

Indicaciones
Para la siguiente base de datos resuelva los ejercicios planteados, se tiene que
desarrollar en SQL Server y en una aplicacin de consola (en el lenguaje de
programacin de su gusto)
Es totalmente individual y no se har defensa sin reserva de horario para evitar
problemas.

El cdigo para crear las tablas se encuentra en el archivo anexo: ciclista.sql

Ejercicios:

1. Obtener el dorsal y el nombre de los ciclistas cuya edad sea menor o igual que 25
aos.
SELECT dorsal, nombre FROM ciclista WHERE edad<=25;

2. Obtener la altura mnima y mxima de los puertos de montaa.


SELECT MAX(altura) as altura_max, MIN(altura) as altura_min FROM puerto;

3. Obtener el nombre de cada ciclista junto con el nombre del equipo al que pertenece
SELECT nombre, nomeq FROM ciclista;

4. Edad media de los ciclistas , agrupadas por equipo.


SELECT AVG(edad) as edad_media FROM ciclista WHERE nomeq='TVM'

5. Nombre de los ciclistas que han ganado alguna etapa, con el nombre de la etapa.
SELECT nombre,netapa FROM ciclista, etapa WHERE
ciclista.dorsal=etapa.dorsal ORDER BY nombre;

6. Obtener el nombre del ciclista ms joven

SELECT nombre,edad FROM ciclista WHERE edad in(SELECT MIN(edad)


FROM ciclista) ORDER BY nombre;

7. Obtener el nombre de los equipos que tengan ms de 5 ciclistas.


SELECT nomeq, COUNT(*) as cant_ciclistas FROM ciclista GROUP BY nomeq
HAVING COUNT(*)>5;

8. Obtener el nombre de los ciclistas que han ganado ms de un puerto, incluyendo el


nombre del equipo al que pertenecen.
SELECT nombre,nomeq as Equipo, COUNT(*) as Puertos FROM ciclista AS c
Inner join puerto AS p on c.dorsal=p.dorsal GROUP BY nombre, nomeq
HAVING COUNT(*)>1

9. Obtener el nombre y el director de los equipos a los que pertenezca algn ciclista
mayor de 33 aos.
SELECT e.nomeq as nombre_equipo, e.director FROM ciclista AS c INNER
JOIN equipo AS e ON c.nomeq = e.nomeq AND c.edad>33

10. Nombre de aquellos ciclistas que tengan una edad entre 25 y 30 aos y que no
pertenezcan a los equipos Kelme y Banesto.
SELECT nombre FROM ciclista WHERE edad BETWEEN 25 AND 30 AND
nomeq NOT IN('Kelme' , 'Banesto');

11. Obtener el nombre de los ciclistas con el color de cada maillot que hayan llevado.
SELECT c.nombre, m.color FROM ciclista AS c INNER JOIN llevar AS ll ON
c.dorsal = ll.dorsal INNER JOIN maillot AS m ON ll.codigo = m.codigo ORDER
BY c.nombre;

12. Obtener pares de nombre de ciclista y nmero de etapa tal que ese ciclista haya
ganado esa etapa habiendo llevado el maillot de color amarillo al menos una vez.
SELECT c.nombre,netapa FROM ciclista as c, maillot as m, llevar as ll WHERE
ll.dorsal=c.dorsal AND ll.codigo=m.codigo AND color='amarillo'

13. Obtener el valor del atributo netapa de las etapas que no comienzan en la misma
ciudad en que acab la anterior etapa.
SELECT e1.netapa, e1.llegada, e2.netapa, e2.salida FROM etapa e1, etapa e2
WHERE e1.netapa+1=e2.netapa AND e1.llegada <> e2.salida;

14. Selecciona el nombre de los puertos con una altura superior a la altura media de
todos los puertos.
SELECT nompuerto FROM puerto WHERE altura > (SELECT AVG(altura)
FROM puerto);

15. Obtener el nombre del ciclista ms joven que ha ganado al menos una etapa.
SELECT nombre FROM ciclista, etapa WHERE ciclista.dorsal=etapa.dorsal AND
edad=(SELECT MIN(edad) FROM ciclista, etapa WHERE
etapa.dorsal=ciclista.dorsal);

16. Obtener el nombre de los ciclistas que han ganado todos los puertos de una etapa y
adems han ganado esa misma etapa.
SELECT DISTINCT nombre FROM ciclista, puerto WHERE
ciclista.dorsal=puerto.dorsal AND nombre IN(SELECT DISTINCT nombre
FROM ciclista, etapa WHERE ciclista.dorsal=etapa.dorsal);

17. Obtener el cdigo y el color de aquellos maillots que slo han sido llevados por
ciclistas de un mismo equipo.
Select maillot.codigo, maillot.color, equipo.nomeq AS Nombre_Equipo From
maillot, llevar, ciclista, equipo Where maillot.codigo=llevar.codigo and
llevar.dorsal=ciclista.dorsal and ciclista.nomeq=equipo.nomeq And not exists
(select * From llevar ll, ciclista c Where ll.codigo=maillot.codigo and
ll.dorsal=c.dorsal and c.nomeq<>ciclista.nomeq);

18. Obtener el director y el nombre de los equipos que tengan ms de 3 ciclistas y cuya
edad media sea igual o inferior a 30 aos.
SELECT e.director, e.nomeq AS Nombre_Equipos,COUNT(*) AS Cantidad
,AVG(c.edad) AS Edad FROM equipo AS e, ciclista AS c WHERE c.nomeq =
e.nomeq GROUP BY e.director, e.nomeq HAVING COUNT(*)>3 AND
AVG(c.edad)<=30

19. Obtener el dorsal y el nombre de los ciclistas que no han llevado ningn maillot de
los que ha llevado el ciclista de dorsal 2.
SELECT DISTINCT c.dorsal, c.nombre FROM ciclista AS c INNER JOIN etapa
AS e ON c.dorsal = e.dorsal INNER JOIN llevar AS ll ON c.dorsal = ll.dorsal AND
e.netapa = ll.netapa INNER JOIN puerto AS p ON c.dorsal = p.dorsal AND
e.netapa = p.netapa WHERE (c.dorsal!= '2')

20. Obtener el dorsal y el nombre del ciclista que ha llevado durante ms kilmetros un
mismo maillot e indicar tambin el color de dicho maillot.
SELECT DISTINCT c.dorsal, c.nombre, e.km, m.color FROM ciclista as c INNER
JOIN etapa AS e ON c.dorsal = e.dorsal INNER JOIN llevar AS ll ON c.dorsal =
ll.dorsal AND e.netapa = ll.netapa INNER JOIN puerto AS p ON c.dorsal =
p.dorsal AND e.netapa = p.netapa INNER JOIN maillot AS m ON ll.codigo =
m.codigo ORDER BY 1

Propuesto: Nombre de los ciclistas que no han ganado alguna etapa.


SELECT nombre FROM ciclista WHERE dorsal NOT IN (SELECT dorsal
FROM etapa);

Вам также может понравиться