ejercicio ciclista sql

13
EJERCICIO CICLISTA Cree las tablas y defina los tipos de datos de acuerdo al siguiente Modelo entidad relación físico y a los datos que se desean ingresar :

Upload: jorge-salazar

Post on 24-Oct-2014

2.004 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: EJERCICIO CICLISTA SQL

EJERCICIO CICLISTA

Cree las tablas y defina los tipos de datos de acuerdo al siguiente Modelo entidad relación físico y a los datos que se desean ingresar :

Page 2: EJERCICIO CICLISTA SQL

CREAR BASE DE DATOS:/*==============================================================*//* Table: CICLISTA *//*==============================================================*/create table CICLISTA (DORSAL VARCHAR2(25) not null,NOMBRE VARCHAR2(45),EDAD NUMBER,NOMEQ VARCHAR2(25),constraint PK_CICLISTA primary key (DORSAL));/*==============================================================*//* Table: EQUIPO *//*==============================================================*/create table EQUIPO (NOMEQ VARCHAR2(25) not null,DESCRIPCION VARCHAR2(45),constraint PK_EQUIPO primary key (NOMEQ));/*==============================================================*//* Table: ETAPA *//*==============================================================*/create table ETAPA (NETAPA NUMBER not null,KM FLOAT,SALIDA VARCHAR2(45),LLEGADA VARCHAR2(45),DORSAL VARCHAR2(45),constraint PK_ETAPA primary key (NETAPA));/*==============================================================*//* Table: LLEVAR *//*==============================================================*/create table LLEVAR (DORSAL VARCHAR2(25) not null,NETAPA NUMBER,CODIGO VARCHAR2(25),constraint PK_LLEVAR primary key (DORSAL));/*==============================================================*//* Table: MAILLOT *//*==============================================================*/create table MAILLOT (CODIGO VARCHAR2(25) not null,TIPO VARCHAR2(45),COLOR VARCHAR2(45),PREMIO VARCHAR2(45),constraint PK_MAILLOT primary key (CODIGO));/*==============================================================*//* Table: PUERTO */

Page 3: EJERCICIO CICLISTA SQL

/*==============================================================*/create table PUERTO (NOMPUERTO VARCHAR2(45) not null,ALTURA FLOAT,CATEGORIA VARCHAR2(45),PENDIENTE VARCHAR2(45),NETAPA NUMBER,DORSAL VARCHAR2(25),constraint PK_PUERTO primary key (NOMPUERTO));alter table CICLISTAadd constraint FK_CICLISTA_ES_PARTE__EQUIPO foreign key (NOMEQ)references EQUIPO (NOMEQ);alter table ETAPAadd constraint FK_ETAPA_TIENE_CICLISTA foreign key (DORSAL)references CICLISTA (DORSAL);alter table LLEVARadd constraint FK_LLEVAR_CUENTA_CO_CICLISTA foreign key (DORSAL)references CICLISTA (DORSAL);alter table LLEVARadd constraint FK_LLEVAR_POSEE_MAILLOT foreign key (CODIGO)references MAILLOT (CODIGO);alter table LLEVARadd constraint FK_LLEVAR_POSEEN_ETAPA foreign key (NETAPA)references ETAPA (NETAPA);alter table PUERTOadd constraint FK_PUERTO_ESTA_EN_CICLISTA foreign key (DORSAL)references CICLISTA (DORSAL);alter table PUERTOadd constraint FK_PUERTO_TIENEN_ETAPA foreign key (NETAPA)references ETAPA (NETAPA);

INSERCIONES-- TABLA EQUIPOINSERT INTO EQUIPO (NOMEQ, DESCRIPCION)VALUES ('EQP001','EQUIPO 1' );INSERT INTO EQUIPO (NOMEQ, DESCRIPCION)VALUES ('EQP002','EQUIPO 2' );INSERT INTO EQUIPO (NOMEQ, DESCRIPCION)VALUES ('EQP003','EQUIPO 3' );INSERT INTO EQUIPO (NOMEQ, DESCRIPCION)VALUES ('EQP004','EQUIPO 4' );INSERT INTO EQUIPO (NOMEQ, DESCRIPCION)VALUES ('EQP005','EQUIPO 5' );INSERT INTO EQUIPO (NOMEQ, DESCRIPCION)VALUES ('EQP006','EQUIPO 6' );INSERT INTO EQUIPO (NOMEQ, DESCRIPCION)VALUES ('EQP007','EQUIPO 7' );INSERT INTO EQUIPO (NOMEQ, DESCRIPCION)VALUES ('EQP008','EQUIPO 8' );INSERT INTO EQUIPO (NOMEQ, DESCRIPCION)VALUES ('EQP009','EQUIPO 9' );INSERT INTO EQUIPO (NOMEQ, DESCRIPCION)VALUES ('EQP010','EQUIPO 10' );SELECT * FROM EQUIPO;-- TABLA MAILLOTINSERT INTO MAILLOT (CODIGO, TIPO, COLOR, PREMIO)VALUES ('COD001','GENERAL', 'AMARILLO', 100000 );INSERT INTO MAILLOT (CODIGO, TIPO, COLOR, PREMIO)VALUES ('COD002','MONTAÑA', 'BLANCO - ROJO', 50000 );INSERT INTO MAILLOT (CODIGO, TIPO, COLOR, PREMIO)VALUES ('COD003','NOVATOS', 'VERDE-NEGRO', 1000 );INSERT INTO MAILLOT (CODIGO, TIPO, COLOR, PREMIO)VALUES ('COD004','EXPERTOS', 'AZUL-BLANCO', 250000 );INSERT INTO MAILLOT (CODIGO, TIPO, COLOR, PREMIO)VALUES ('COD005','EXTREMO', 'GRIS', 70000 );INSERT INTO MAILLOT (CODIGO, TIPO, COLOR, PREMIO)VALUES ('COD006','LIBRE', 'ROJO', 10000 );INSERT INTO MAILLOT (CODIGO, TIPO, COLOR, PREMIO)VALUES ('COD007','GRUPOS', 'BLANCO - ROJO - NEGRO', 10000 );INSERT INTO MAILLOT (CODIGO, TIPO, COLOR, PREMIO)VALUES ('COD008','GRAN MASTER', 'AZUL - NARANJA', 10000 );INSERT INTO MAILLOT (CODIGO, TIPO, COLOR, PREMIO)

Page 4: EJERCICIO CICLISTA SQL

VALUES ('COD009','MIXTO', 'NARANJA', 10000 );INSERT INTO MAILLOT (CODIGO, TIPO, COLOR, PREMIO)VALUES ('COD010','RELEVOS', 'ROJO - VERDE', 10000 );SELECT * FROM MAILLOT;-- TABLA CICLISTAINSERT INTO CICLISTA (DORSAL, NOMBRE, EDAD, NOMEQ)VALUES ('DRS001', 'CICLISTA 001', 17, 'EQP001');INSERT INTO CICLISTA (DORSAL, NOMBRE, EDAD, NOMEQ)VALUES ('DRS002', 'CICLISTA 002', 22, 'EQP003');INSERT INTO CICLISTA (DORSAL, NOMBRE, EDAD, NOMEQ)VALUES ('DRS003', 'CICLISTA 003', 27, 'EQP006');INSERT INTO CICLISTA (DORSAL, NOMBRE, EDAD, NOMEQ)VALUES ('DRS004', 'CICLISTA 004', 28, 'EQP005');INSERT INTO CICLISTA (DORSAL, NOMBRE, EDAD, NOMEQ)VALUES ('DRS005', 'CICLISTA 005', 30, 'EQP007');INSERT INTO CICLISTA (DORSAL, NOMBRE, EDAD, NOMEQ)VALUES ('DRS006', 'CICLISTA 006', 55, 'EQP009');INSERT INTO CICLISTA (DORSAL, NOMBRE, EDAD, NOMEQ)VALUES ('DRS007', 'CICLISTA 007', 32, 'EQP002');INSERT INTO CICLISTA (DORSAL, NOMBRE, EDAD, NOMEQ)VALUES ('DRS008', 'CICLISTA 008', 12, 'EQP004');INSERT INTO CICLISTA (DORSAL, NOMBRE, EDAD, NOMEQ)VALUES ('DRS009', 'CICLISTA 009', 33, 'EQP008');INSERT INTO CICLISTA (DORSAL, NOMBRE, EDAD, NOMEQ)VALUES ('DRS010', 'CICLISTA 010', 21, 'EQP010');SELECT * FROM CICLISTA;-- TABLA ETAPAINSERT INTO ETAPA (NETAPA, KM, SALIDA, LLEGADA, DORSAL)VALUES (1, 10,'SLD001','LGDA001','DRS001' );INSERT INTO ETAPA (NETAPA, KM, SALIDA, LLEGADA, DORSAL)VALUES (2, 12,'SLD002','LGDA003','DRS002' );INSERT INTO ETAPA (NETAPA, KM, SALIDA, LLEGADA, DORSAL)VALUES (3, 20,'SLD003','LGDA005','DRS004' );INSERT INTO ETAPA (NETAPA, KM, SALIDA, LLEGADA, DORSAL)VALUES (4, 15,'SLD004','LGDA007','DRS006' );INSERT INTO ETAPA (NETAPA, KM, SALIDA, LLEGADA, DORSAL)VALUES (5, 10,'SLD005','LGDA009','DRS008' );INSERT INTO ETAPA (NETAPA, KM, SALIDA, LLEGADA, DORSAL)VALUES (6, 22,'SLD006','LGDA002','DRS003' );INSERT INTO ETAPA (NETAPA, KM, SALIDA, LLEGADA, DORSAL)VALUES (7, 20,'SLD007','LGDA004','DRS005' );INSERT INTO ETAPA (NETAPA, KM, SALIDA, LLEGADA, DORSAL)VALUES (8, 12,'SLD008','LGDA006','DRS007' );INSERT INTO ETAPA (NETAPA, KM, SALIDA, LLEGADA, DORSAL)VALUES (9, 10,'SLD009','LGDA008','DRS009' );INSERT INTO ETAPA (NETAPA, KM, SALIDA, LLEGADA, DORSAL)VALUES (10, 15,'SLD010','LGDA010','DRS010' );SELECT * FROM ETAPA;-- TABLA LLEVARINSERT INTO LLEVAR (DORSAL, NETAPA,CODIGO)VALUES ('DRS001',1,'COD001' );INSERT INTO LLEVAR (DORSAL, NETAPA,CODIGO)VALUES ('DRS002',2,'COD002' );INSERT INTO LLEVAR (DORSAL, NETAPA,CODIGO)VALUES ('DRS003',3,'COD003' );INSERT INTO LLEVAR (DORSAL, NETAPA,CODIGO)VALUES ('DRS004',4,'COD004' );INSERT INTO LLEVAR (DORSAL, NETAPA,CODIGO)VALUES ('DRS005',5,'COD005' );INSERT INTO LLEVAR (DORSAL, NETAPA,CODIGO)VALUES ('DRS006',6,'COD006' );INSERT INTO LLEVAR (DORSAL, NETAPA,CODIGO)VALUES ('DRS007',7,'COD007' );INSERT INTO LLEVAR (DORSAL, NETAPA,CODIGO)VALUES ('DRS008',8,'COD008' );INSERT INTO LLEVAR (DORSAL, NETAPA,CODIGO)VALUES ('DRS009',9,'COD009' );INSERT INTO LLEVAR (DORSAL, NETAPA,CODIGO)VALUES ('DRS010',10,'COD010' );SELECT * FROM LLEVAR;-- TABLA PUERTOINSERT INTO PUERTO (NOMPUERTO, ALTURA, CATEGORIA, PENDIENTE, NETAPA,DORSAL)VALUES ('PRTO-001',1.75, 'CTGR001','DRS001',1,'DRS001' );INSERT INTO PUERTO (NOMPUERTO, ALTURA, CATEGORIA, PENDIENTE, NETAPA,DORSAL)VALUES ('PRTO-002',2.03, 'CTGR002','DRS002',4,'DRS004' );

Page 5: EJERCICIO CICLISTA SQL

INSERT INTO PUERTO (NOMPUERTO, ALTURA, CATEGORIA, PENDIENTE, NETAPA,DORSAL)VALUES ('PRTO-003',2.15, 'CTGR003','DRS004',2,'DRS002' );INSERT INTO PUERTO (NOMPUERTO, ALTURA, CATEGORIA, PENDIENTE, NETAPA,DORSAL)VALUES ('PRTO-004',1.88, 'CTGR004','DRS006',3,'DRS003' );INSERT INTO PUERTO (NOMPUERTO, ALTURA, CATEGORIA, PENDIENTE, NETAPA,DORSAL)VALUES ('PRTO-005',1.90, 'CTGR005','DRS008',5,'DRS005' );INSERT INTO PUERTO (NOMPUERTO, ALTURA, CATEGORIA, PENDIENTE, NETAPA,DORSAL)VALUES ('PRTO-006',2.05, 'CTGR006','DRS010',6,'DRS006' );INSERT INTO PUERTO (NOMPUERTO, ALTURA, CATEGORIA, PENDIENTE, NETAPA,DORSAL)VALUES ('PRTO-007',1.80, 'CTGR007','DRS003',7,'DRS007' );INSERT INTO PUERTO (NOMPUERTO, ALTURA, CATEGORIA, PENDIENTE, NETAPA,DORSAL)VALUES ('PRTO-008',1.50, 'CTGR008','DRS005',8,'DRS008' );INSERT INTO PUERTO (NOMPUERTO, ALTURA, CATEGORIA, PENDIENTE, NETAPA,DORSAL)VALUES ('PRTO-009',2.15, 'CTGR009','DRS007',9,'DRS009' );INSERT INTO PUERTO (NOMPUERTO, ALTURA, CATEGORIA, PENDIENTE, NETAPA,DORSAL)VALUES ('PRTO-010',1.95, 'CTGR010','DRS009',10,'DRS010' );

Page 6: EJERCICIO CICLISTA SQL

a) Realiza las siguientes consultas en SQL:

1. Nombre de los ciclistas que han ganado alguna etapa.

SELECT DISTINCT C.NOMBREFROM CICLISTA C, EQUIPO E, ETAPA ET, PUERTO P, LLEVAR LL, MAILLOT MWHERE C.DORSAL = P.DORSAL AND P.DORSAL = ET.DORSALAND P.NETAPA = LL.NETAPA AND LL.CODIGO = M.CODIGO;

2. Obtener el nombre del ciclista que tiene más de 20 años.

SELECT C.NOMBRE AS CICLISTAFROM CICLISTA CWHERE C.EDAD > 20;

3. Obtener el número de ciclistas de cada equipo.

SELECT NOMEQ AS EQUIPO, COUNT(NOMEQ) AS "INTEGRANTES" FROM CICLISTAGROUP BY NOMEQ;

4. Obtener el nombre de los equipos que tengan un número mayor al promedio de ciclistas.

SELECT NOMEQ AS EQUIPO, COUNT(NOMEQ) AS "INTEGRANTES" FROM CICLISTAGROUP BY NOMEQHAVING COUNT(NOMEQ)> (SELECT AVG(COUNT(NOMBRE)) FROM CICLISTAGROUP BY NOMBRE);

5. Obtener el número de puertos que ha ganado cada ciclista.

SELECT C.NOMBRE, COUNT(P.NOMPUERTO) AS "NUM. PUERTOS"FROM CICLISTA C, PUERTO P, LLEVAR LLWHERE C.DORSAL = P.DORSAL AND LL.DORSAL = P.DORSAL AND P.NETAPA = LL.NETAPAGROUP BY C.NOMBRE;

6. Obtener el nombre de los ciclistas que no ha ganado ningún puerto.select nombrefrom ciclistawhere dorsal not in(select dorsal from puerto);

7. Obtener el nombre y el director de los equipos a los que pertenezca algún ciclista mayor de 33 años.

SELECT E.NOMEQ AS EQUIPO, E.DESCRIPCION AS "DIRECTOR"FROM CICLISTA C, EQUIPO EWHERE E.NOMEQ = C.NOMEQ AND C.EDAD > 33;

8. Nombre de los ciclistas que pertenezcan a ‘Kelme’.

SELECT C.NOMBRE AS CICLISTAFROM CICLISTA C, EQUIPO EWHERE E.NOMEQ = C.NOMEQ AND E.NOMEQ like 'Kelme';

9. Nombre de los ciclistas que haya ganado más de una etapa.

select nombre,COUNT(*)from ciclista,etapawhere ciclista.dorsal=etapa.dorsalgroup by nombrehaving count(*)>1;

10. Nombre de los ciclistas que no hayan ganado ningún puerto de montaña.select nombrefrom ciclista

Page 7: EJERCICIO CICLISTA SQL

where dorsal not in(select dorsal from puerto);

11. Nombre de los ciclistas que hayan ganado más de un puerto de montaña.

SELECT DISTINCT C.NOMBREFROM CICLISTA C, EQUIPO E, ETAPA ET, PUERTO P, LLEVAR LL, MAILLOT MWHERE C.DORSAL = P.DORSAL AND P.DORSAL = ET.DORSAL AND M.CODIGO = LL.CODIGOAND P.NETAPA = LL.NETAPA AND M.TIPO LIKE 'montaña';

12. ¿Qué ciclistas han llevado el mismo maillot que Miguel Indurain?

SELECT C.NOMBREFROM CICLISTA C, EQUIPO E, ETAPA ET, PUERTO P, LLEVAR LL, MAILLOT MWHERE C.DORSAL = P.DORSAL AND P.DORSAL = ET.DORSAL AND M.CODIGO = LL.CODIGOAND M.CODIGO = (SELECT M.CODIGO FROM CICLISTA C, LLEVAR L, MAILLOT MWHERE C.DORSAL = L.DORSAL AND C.NOMBRE LIKE 'miguel%indur%' );

13. De cada equipo obtener la edad media, la máxima edad y la mínima edad.

SELECT E.NOMEQ AS EQUIPO, AVG(C.EDAD), MIN(C.EDAD), MAX(C.EDAD) FROM CICLISTA C,EQUIPO EWHERE E.NOMEQ = C.NOMEQGROUP BY E.NOMEQ;

14. Nombre de aquellos ciclistas que tengan una edad entre 25 y 30 años y que pertenezcan a los equipos Kelme y Banesto.

SELECT E.NOMEQ AS EQUIPO, E.NOMEQ AS EQUIPOFROM CICLISTA C, EQUIPO EWHERE E.NOMEQ IN ('Kelme', 'Banesto')AND (C.EDAD BETWEEN 25 AND 30);

15. Nombre de los ciclistas que han ganado la etapa que comienza en Zamora.

SELECT C.NOMBRE FROM CICLISTA C, ETAPA ETWHERE C.DORSAL = ET.DORSAL AND ET.SALIDA LIKE 'Zamora%';

16. Obtén el nombre y la categoría de los puertos ganados por ciclistas del equipo Banesto.select nompuerto,categoriafrom puertowhere dorsal in (select dorsal from ciclista where nomeq='Banesto');

17. Obtener el nombre de cada puerto indicando el número (netapa) y los kilómetros de la etapa en la que se encuentra el puerto.

SELECT P.NOMPUERTO,P.NETAPA,E.KM FROM PUERTO P,ETAPA E WHERE E.NETAPA=P.NETAPA;

18. Obtener el nombre de los ciclistas con el color de cada maillot que hayan llevado.

select nombre,maillot.codigo,maillot.colorfrom ciclista,maillot,llevarwhere ciclista.dorsal=llevar.dorsal and maillot.codigo=llevar.codigo;

19. Obtener pares de nombre de ciclista y número de etapa tal que ese ciclista haya ganado esa etapa habiendo llevado el maillot de color amarillo al menos una vez.

select nombrefrom ciclista,maillot,llevar

Page 8: EJERCICIO CICLISTA SQL

where ciclista.dorsal=llevar.dorsal and maillot.codigo=llevar.codigo and color='Amarillo';

OTRA RESPUESTA

Select distinct nombre,netapa,color from ciclista inner join etapa using(dorsal) inner join llevar using(dorsal) inner join maillot using (codigo)where maillot.color like ‘amarill%’;

20. 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.salidaFrom etapa e1, etapa e2Where e1.netapa+1=e2.netapa and e1.llegada <>e2.salida;

21. Obtener el valor del atributo netapa y la ciudad de salida de aquellas etapas que no tengan puertos de montaña.

SELECT e. netapa ,E.SALIDA,E.LLEGADA FROM ETAPA E,PUERTO P WHERE E.NETAPA=P.NETAPA ANDP.netapa not in (SELECT DISTINCT P.NETAPAFROM CICLISTA C, EQUIPO E, ETAPA ET, PUERTO P, LLEVAR LL, MAILLOT MWHERE C.DORSAL = P.DORSAL AND P.DORSAL = ET.DORSAL AND M.CODIGO = LL.CODIGOAND P.NETAPA = LL.NETAPA AND M.TIPO NOT LIKE 'montaña');

22. Obtener la edad media de los ciclistas que han ganado alguna etapa.

select avg(edad)from ciclistawhere dorsal in (select dorsal from etapa);

23. Selecciona el nombre de los puertos con una altura superior a la altura media de todos los puertos.

select nompuertofrom puertowhere altura>(select avg(altura) from puerto);

24. Obtener el nombre de la ciudad de salida y de llegada de las etapas donde estén los puertos con mayor pendiente.

select salida,llegadafrom etapawhere netapa in(select netapafrom puertowhere pendiente=(select max(pendiente) from puerto));

25. Obtener el dorsal y el nombre de los ciclistas que han ganado los puertos de mayor altura.

select ciclista.dorsal,nombrefrom ciclista,puertowhere ciclista.dorsal=puerto.dorsal and altura=(select max(altura) from puerto);

26. Obtener el nombre del ciclista más joven que ha ganado al menos una etapa.

select nombrefrom ciclistawhere edad=(select min(edad) from ciclista,etapawhere ciclista.dorsal=etapa.dorsal);

Page 9: EJERCICIO CICLISTA SQL

27. Obtener el valor del atributo netapa de aquellas etapas tales que todos los puertos que están en ellas tienen más de 700 metros de altura.

select distinct etapa.netapafrom etapa,puertowhere etapa.netapa=puerto.netapa and puerto.altura>700and not exists (select * from puerto p2where p2.netapa=etapa.netapa and p2.altura<700);

28. Obtener el nombre y el director de los equipos tales que todos sus ciclistas son mayores de 20 años.

select equipo.nomeq,equipo.descripcionfrom equipo where not exists (select * from ciclista where equipo.nomeq=ciclista.nomeq and ciclista.edad<20);

29. Obtener el dorsal y el nombre de los ciclistas tales que todas las etapas que han ganado tienen más de 170 km (es decir que sólo han ganado etapas de más de 170 km).select ciclista.dorsal,ciclista.nombrefrom ciclista,etapa e1where ciclista.dorsal=e1.dorsaland not exists (select *from etapawhere ciclista.dorsal=etapa.dorsal and etapa.km<170);

30. Obtener el nombre de los ciclistas que han ganado todos los puertos de una etapa y además han ganado esa misma etapa.

Select ciclista.nombre, ciclista.dorsalFrom ciclista, etapa, puertoWhere ciclista.dorsal=etapa.dorsal and etapa.netapa=puerto.netapa and not exists (select *from puerto p1where ciclista.dorsal<>p1.dorsal and etapa.netapa=p1.netapa);

31. Obtener el nombre de los equipos tales que todos sus corredores han llevado algún maillot o han ganado algún puerto.

Select distinct equipo.nomeqFrom equipo, ciclista c1Where equipo.nomeq=c1.nomeq And exists (select *From ciclista c2, puerto, llevar Where c1.dorsal=c2. dorsal and (c2.dorsal=llevar.dorsal or c2.dorsal=puerto.dorsal))Having count (*)=(select count (*)From ciclista c3Where equipo.nomeq=c3. nomeqGroup by c3.nomeq)Group by equipo.nomeq;

32. Obtener el código y el color de aquellos maillots que sólo han sido llevados por ciclistas de un mismo equipo.

Select maillot.codigo, maillot.color, equipo.nomeqFrom maillot, llevar, ciclista, equipoWhere maillot.codigo=llevar.codigo and llevar.dorsal=ciclista.dorsal and ciclista.nomeq=equipo.nomeqAnd not exists (select *From llevar ll, ciclista cWhere ll.codigo=maillot.codigo and ll.dorsal=c.dorsal and c.nomeq<>ciclista.nomeq);

Page 10: EJERCICIO CICLISTA SQL

33. Obtener el nombre de aquellos equipos tal que sus ciclistas sólo hayan ganado puertos de 1ª categoría.

SELECT C.NOMBRE,COUNT(P.NOMPUERTO) FROM CICLISTA C,PUERTO P WHEREC.DORSAL=P.DORSAL HAVING COUNT(P.NOMPUERTO)>1 GROUP BY C.NOMBRE;

34. Obtener el valor del atributo netapa de aquellas etapas que tienen puertos de montaña indicando cuántos tiene.

SELECT e. netapa,COUNT(*) FROM ETAPA E,PUERTO P WHERE E.NETAPA=P.NETAPA ANDP.netapa not in (SELECT DISTINCT P.NETAPAFROM CICLISTA C, EQUIPO E, ETAPA ET, PUERTO P, LLEVAR LL, MAILLOT MWHERE C.DORSAL = P.DORSAL AND P.DORSAL = ET.DORSAL AND M.CODIGO = LL.CODIGOAND P.NETAPA = LL.NETAPA AND M.TIPO NOT LIKE 'montaña')GROUP BY e. netapa;

35. Obtener el nombre de todos los equipos indicando cuántos ciclistas tiene cada uno.

select nomeq,count(*)from ciclistagroup by nomeq;

36. Obtener el director y el nombre de los equipos que tengan más de 3 ciclistas y cuya edad media sea igual o inferior a 30 años. NO EXISTE DIRECTOR

select equipo.nomeq,equipo.descripcionfrom equipo,ciclistawhere equipo.nomeq=ciclista.nomeqgroup by equipo.nomeqhaving count(*)>3 and avg(edad)>30;

37. Obtener el nombre de los ciclistas que pertenezcan a un equipo que tenga más de cinco corredores y que hayan ganado alguna etapa indicando cuántas etapas ha ganado.Select ciclista.nombre, count(*)From ciclista, equipo, etapaWhere ciclista.nomeq=equipo.nomeq and ciclista.dorsal=etapa.dorsalAnd equipo.nomeq in (select c.nomeqFrom ciclista cHaving count(*)>5Group by nomeq)Group by ciclista.nombre ;

38. Obtener el nombre de los equipos y la edad media de sus ciclistas de aquellos equipos que tengan la media de edad máxima de todos los equipos.

Select nomeq, avg(ciclista.edad)From ciclistaHaving avg(edad ) = (select max(avg(edad) )From ciclista cGroup by c.nomeq)Group by nomeq;

39. Obtener el director de los equipos cuyos ciclistas han llevado más días maillots de cualquier tipo.

Select e.descripcion, c.nomeq, count (*)From ciclista c, llevar ll, equipo eWhere c.dorsal =ll.dorsal and c.nomeq=e.nomeqHaving count(*) = (select max(count(*))

Page 11: EJERCICIO CICLISTA SQL

From llevar ll1, ciclista c1Where ll1.dorsal=c1.dorsalGroup by (c1.nomeq) )Group by e.descripcion, c.nomeq;

40. Obtener el código y el color del maillot que ha sido llevado por algún ciclista que no ha ganado ninguna etapa.

SELECT L.CODIGO, COLOR FROM LLEVAR LJOIN MAILLOT M ON M.CODIGO = L.CODIGO WHERE L.CODIGO IN(SELECT NOMEQ FROM ETAPA EJOIN CICLISTA C ON C.DORSAL = E.DORSALWHERE E.DORSAL IS NULL);

41. Obtener el valor del atributo netapa, la ciudad de salida y la ciudad de llegada de las etapas de más de 190 km y que tengan por lo menos dos puertos.

SELECT NETAPA,SALIDA,LLEGADA FROM ETAPAWHERE NETAPA IN(SELECT NETAPA FROM ETAPA WHERE ETAPA.KM>190)

AND EXISTS (SELECT NETAPA,COUNT(*) FROM PUERTO HAVING COUNT(NETAPA)>=2);

42. Obtener el dorsal y el nombre de los ciclistas que han llevado al menos un maillot de los que ha llevado el ciclista de dorsal 2.

SELECT L.DORSAL, NOMBRE FROM LLEVAR LJOIN CICLISTA C ON C.DORSAL = L.DORSALWHERE CODIGO IN(SELECT L.CODIGO FROM LLEVAR LJOIN CICLISTA C ON C.DORSAL = L.DORSALWHERE C.DORSAL=2)GROUP BY L.DORSAL, NOMBREHAVING COUNT(CODIGO)>=1;

43. Obtener el dorsal y nombre de los ciclistas que han llevado exactamente los mismos maillots que ha llevado el ciclista de dorsal 1.

SELECT DISTINCT L.DORSAL, NOMBRE FROM LLEVAR LJOIN CICLISTA C ON C.DORSAL = L.DORSALWHERE CODIGO IN(SELECT L.CODIGO FROM LLEVAR LJOIN CICLISTA C ON C.DORSAL = L.DORSAL) AND CODIGO IN(SELECT L.CODIGO FROM LLEVARLJOIN CICLISTA C ON C.DORSAL = L.DORSALWHERE C.DORSAL=1);

44. Obtener el dorsal y el nombre del ciclista que ha llevado durante más kilómetros un mismo maillot e indicar también el color de dicho maillot.

SELECT DISTINCT L.DORSAL,COLOR,NOMBRE FROM LLEVAR LJOIN CICLISTA C ON C.DORSAL = L.DORSALJOIN ETAPA E ON E.NETAPA = L.NETAPAJOIN MAILLOT M ON M.CODIGO = L.CODIGOWHERE KM = (SELECT MAX(KM) FROM ETAPA)AND CODIGO IN(SELECT L.CODIGO FROM LLEVAR L JOIN CICLISTA C ON C.DORSAL =L.DORSAL) ;

45. Obtener el valor del atributo netapa y los km de las etapas que tienen puertos de montaña.

SELECT e. netapa,e.km FROM ETAPA E,PUERTO P WHERE E.NETAPA=P.NETAPA ANDP.netapa not in (SELECT DISTINCT P.NETAPAFROM CICLISTA C, EQUIPO E, ETAPA ET, PUERTO P, LLEVAR LL, MAILLOT M

Page 12: EJERCICIO CICLISTA SQL

WHERE C.DORSAL = P.DORSAL AND P.DORSAL = ET.DORSAL AND M.CODIGO = LL.CODIGOAND P.NETAPA = LL.NETAPA AND M.TIPO NOT LIKE 'montaña');