Ejercicios SQL Vuelta Ciclista

Documentos relacionados
Ejercicios SQL Vuelta Ciclista

FICHEROS Y BASES DE DATOS 2º ITIG 8/9/2001 NOMBRE

Operaciones con bases de

Ejercicios de Álgebra Relacional y Cálculo Relacional

Consultas Complejas:

FICHEROS Y BASES DE DATOS 2º ITIG 25/1/2002 NOMBRE

all : Permite la aparición de filas idénticas (valor por defecto). distinct: No permite la aparición de filas idénticas.

Lenguaje SQL 1ª Parte: Manipulación de Bases de Datos

BASES DE DATOS. 2º CURSO Escuela Universitaria de Informática Facultad de Informática. Práctica nº 3 (1ª parte) Consultas a bases de datos

Ejercicios de Álgebra Relacional y Cálculo Relacional

Ejercicios SQL Empresa

FUNCIONES EN SQL SERVER

Agrupamiento de registros. Elaboración de claúsulas avanzadas de selección. 31/12/2011. Unidad 9

SELECT listadecampos FROM nombredetablas WHERE condicionesdebúsqueda;

Operador Restricción

Sistemas de Datos Curso: Ernesto Chinkes. Subconsultas Stored Procedures - Triggers

SQL (DML) Carlos A. Olarte Gestión y Modelación de SQL Datos (DML)

Union, Intersect, Minus

EJERCICIOS RESUELTOS

Video Club Tarea 2 - Solución

Conceptos Avanzados de Bases de datos

Procedimientos para agrupar y resumir datos

TRANSACT-SQL, DISEÑO Y PROGRAMACIÓN DE BASES DE DATOS EN SQL SERVER 2008

SQL, Consultas. Son Importantes las Consultas? Cuál es el Resultado de SELECT? Andrés Moreno S.

Datos Agregados por medio de Funciones de Grupo. Copyright Oracle Corporation, All rights reserved.

Ficheros y Bases de Datos. Boletín de ejercicios de álgebra relacional y cálculo relacional. Esquema 2. Esquema 1

Bases de Datos. Práctica 7 WinRDBI. Consultas en cálculo relacional y SQL

SQL. Carlos A. Olarte BDI

Ejercicios de Algebra Relacional y Cálculo Relacional

Manual de Sentencias Básicas en SQL

Capítulo 4. Realización de consultas

Práctica 3: El lenguaje SQL (1ª parte). (4ª sesión)

Ejemplo de gestión de datos con SQL

SELECT nombre, altura FROM Puerto WHERE categoria = 1;

BASES DE DATOS I CONSULTA DE DATOS

Bases de Datos Curso Grado en Ingeniería del Software Examen Junio. Nombre:

Unidad III: Lenguaje de manipulación de datos (DML) 3.1 Inserción, eliminación y modificación de registros

Ficheros y Bases de Datos Curso Primer Parcial. 7 de FEBRERO de Nombre:

1. DML. Las consultas de resumen

EJERCICIOS SQL - TABLAS S, P Y SP

Práctica Obtener el código y el doble del precio de los artículos cuyo precio es inferior a 5 céntimos de euro.

Las soluciones de las consultas vistas en clase se encuentran en la página 5 en adelante.

MANUAL BÁSICO DEL LENGUAJE SQL

DML SQL II. Comparaciones con relaciones

Pontevedra necesitaba un marcha cicloturista popular no competitiva.

1. Dadas las tablas ALUM y NUEVOS, insertar en la tabla ALUM los nuevos alumnos.

Entrarás a formar parte de nuestra bolsa de empleo a la que acuden las empresas en busca de nuestros alumnos.

S.Q.L. (Lenguaje de Consulta Estructurada)

Introducción 1 Recuperación de Datos mediante la Sentencia SQL SELECT

ÍNDICE. Introducción... Capítulo 1. Novedades de Access

El lenguaje SQL es un lenguaje estándar para el acceso y

Procedimientos para agrupar y resumir datos

Usando los operadores SET (Conjunto)

SUBCONSULTAS SUBCONSULTAS

Lenguaje de manipulación de datos

UNIDAD 1.- PARTE 1 MANIPULACIÓN AVANZADA DE DATOS CON SQL. BASES DE DATOS PARA APLICACIONES. Xochitl Clemente Parra Armando Méndez Morales

Guía de ejercicios de SQL Prof. Mauricio E. Fernández N. Semestre Agosto-Diciembre de 2012

Diseño de Bases de Datos Bases de Datos Documentales Grao en Información e Documentación Curso 2013/2014

ÍNDICE PRIMERA PARTE... 17

LENGUAJE DE MANIPULACIÓN DE DATOS (DML) CONSULTA DE DATOS

APÉNDICE SQL (Structures Query Language)

Access SQL: DDL y DML. Una empresa de Ingeniería precisa una base de datos para la gestión de sus proyectos.

ÍNDICE. Introducción... Capítulo 1. Características, instalación, inicio y entorno de trabajo... 1

Boletín de Problemas de la Asignatura II18 Bases de Datos. Ingeniería Informática Universitat Jaume I

Sql Basico. Seminar Introduction

Tema 4. TEMA 4. El lenguaje de consulta SQL

Manual Aprendiendo Practicando Oracle SQL (Spanish Edition) Click here if your download doesn"t start automatically

Guía de ejercicios de SQL

Ficheros y Bases de Datos Curso Ingeniería Técnica de Informática Primer Parcial. 10-Feb Nombre:

SQL (Structured Query Language)

Base de Datos Oracle 10g: Introducción a SQL Código: D Duración: 5 días (40 horas)

Reglamento Vuelta Asturias 2016

Repaso de Conceptos Básicos de Bases de Datos

Operaciones con bases de

Tema 4. Manipulación de datos con SQL

Maestría en Bioinformática. Bases de Datos y Sistemas de Información SQL: SELECT. Ing. Alfonso Vicente, PMP

1. DML. Las consultas multitabla

XVIII TROFEO EDWARD & SUANZES

SQL. Álgebra Relacional Selección y proyección Operaciones sobre conjuntos: unión, intersección, diferencia, producto Reunión natural

REGLAMENTO PARTICULAR

select nombre from profesores where categoria='aso6';

ÍNDICE INTRODUCCIÓN...13

El Lenguaje SQL TEMA V. Grupo de Bas ses de Datos Avanzadas Univ. Carlo os III de Madrid. V.1 SQL como Lenguaje de Definición de Datos

Tarea 2 - Consultas en SQL Solución propuesta por los docentes

PARTE I Desarrollen las siguientes cuestiones (concepto, ejemplos, etc):

Vistas en InformiX Sistemas de Bases de Datos II EMT CETP A/S Leonardo Carámbula

SQL Avanzado. José Muñoz Jimeno Febrero 2015

ORACLE 10g. Descripción A QUIEN VA DIRIGIDO?

Práctica A: Procedimientos para agrupar y resumir datos

CUBE, ROLLUP, GROUPING del SQL

Subconsultas. Copyright Oracle Corporation, All rights reserved.

Restricción y Clasificación de los Datos. Copyright Oracle Corporation, All rights reserved.

Taller SQL - SUP. Introducción al Lenguaje SQL. Claúsula Where. Sentencia Select Sentencia Insert Sentencia Update Sentencia Delete

8 SQL SERVER 2008 RA-MA

CURSO DE SQL SERVER 2005

Conexión a la base desde OO. OpenOffice & Postgres. Conexión a la base desde OO. Conexión a la base desde OO. Conexión a la base desde OO

HOJA DE ASIGNATURA CON DESGLOSE DE UNIDADES TEMÁTICAS

Guía técnica XV TROFEO ROLDAN Copa España Féminas 2017

Computación Web (Curso 2015/2016)

Transcripción:

Ejercicios SQL Vuelta Ciclista La siguiente base de datos almacena información sobre una vuelta ciclista: Equipo(, director) Ciclista(dorsal, nombre, edad, ) Etapa(numetapa, kms, salida, llegada, dorsal) Puerto(nompuerto, altura, categoría, pendiente, numetapa, dorsal) Maillot(código, tipo, color, premio) Lleva(código, numetapa, dorsal) La clave primaria de cada relación está formada por los atributos que aparecen subrayados. La información que contienen las relaciones anteriores se describe a continuación: Equipo contiene los datos de los distintos equipos: nombre () y nombre de su director (director). Ciclista contiene los datos de los ciclistas que componen los distintos equipos: número del dorsal (dorsal), nombre del ciclista (nombre), edad del ciclista (edad) y nombre del equipo al que pertenece (). Etapa contiene los datos de las etapas que componen la vuelta ciclista: número de la etapa (numetapa) (las etapas se numeran consecutivamente: 1, 2,...), kilómetros que tiene la etapa (kms), nombre de la población de donde sale la etapa (salida), nombre de la población donde está la meta de la etapa (llegada) y número del dorsal del ciclista que ha ganado la etapa (dorsal). Los atributos salida y llegada están definidos sobre el mismo dominio. Puerto contiene los datos de los puertos de montaña que visita la vuelta ciclista: nombre del puerto (nompuerto), altura máxima del puerto (altura), categoría del puerto: primera, especial, etc. (categoría), porcentaje que indica la pendiente media del puerto (pendiente), número de la etapa donde se sube el puerto (numetapa) y número del dorsal que ha ganado el puerto al pasar en primera posición (dorsal). Maillot contiene los datos de los premios que se otorgan mediante los distintos maillots: código del maillot (código), clasificación que premia ese maillot: general, montaña, etc. (tipo), color de la camiseta asociada (color) e importe del premio que corresponde al ciclista que termine la vuelta llevando el maillot (premio). Lleva contiene la información sobre qué ciclistas (dorsal) han llevado cada maillot (código) en cada una de las etapas (numetapa). Las claves ajenas se muestran en los siguientes diagramas referenciales. 1

Consultas y resultados 1. Obtener el nombre y el equipo de los ciclistas menores de 30 años que hayan ganado alguna etapa. nombre Bo Hamburger Erik Dekker Laurent Jalabert Mario Cipollini Pascal Lino Vladislav Bobrik TVM Wordperfect ONCE Mercatone Uno Amore Vita 2. Obtener el nombre y el equipo de los ciclistas mayores de 32 años que hayan ganado algún puerto. nombre Massimo Podenzana Pedro Delgado Navigare 3. Obtener los datos de las etapas que pasan por algún puerto de montaña y que tienen salida y llegada en la misma población. numetapa kms salida llegada dorsal 18 195 Ávila Ávila 8 4. Obtener las poblaciones que tienen la meta de alguna etapa, pero desde las que no se realiza ninguna salida. llegada Alicante Alto de la Cruz de la Demanda Alto del Naranco Caceres Estación de Cerler Lagos de Covadonga Madrid Sierra Nevada Valencia 2

5. Obtener el nombre y el equipo de los ciclistas que han ganado alguna etapa llevando el maillot amarillo, mostrando también el número de etapa. nombre numetapa Miguel Induráin 1 6. Obtener las poblaciones de salida y de llegada de las etapas donde se encuentran puertos con altura superior a 1300 metros. salida llegada Andorra Estación de Cerler Ávila Ávila Ávila Destilerias Dyc Igualada ANDorra Valladolid Salamanca 7. Obtener el número de las etapas que tienen algún puerto de montaña, indicando cuántos tiene cada una de ellas. numetapa numero_puertos 2 1 10 4 11 2 15 1 16 1 18 3 19 2 8. Obtener el nombre y la edad de los ciclistas que han llevado dos o más maillots en una misma etapa. dorsal nombre edad 1 Miguel Induráin 32 26 Mikel Zarrabeitia 27 30 Melchor Mauri 28 9. Obtener el nombre y el equipo de los ciclistas que han llevado algún maillot o que han ganado algún puerto. nombre Alessio Di Basco Amore Vita Eddy Seigneur Gianni Bugno Castorama Gatorade Massimo Podenzana Melchor Mauri Navigare Alex Zulle ONCE Giorgio Furlan Miguel Induráin Alfonso Gutiérrez Artiach Jean Van Poppel Lotus Festina Mikel Zarrabeitia ArmAND de las Cuevas Bruno Leali Castorama Bresciali-Refin Jesus Montoya Laurent Jalabert ONCE Pedro Delgado Per Pedersen Seguros Amaya Claudio Chiappucci Davide Cassani Carrera TVM Marco Saligari Mario Cipollini Mercatone Uno Stefano della Santa Tony Rominger Mapei-Clas Mapei-Clas Dimitri Konishev Jolly Club Massimiliano Lelli Mercatone Uno Total : 25 filas 10. Obtener los números de las etapas que no tienen puertos de montaña. numetapa 1 3 4 5 Total : 14 filas 6 7 8 9 12 13 14 17 20 21 3

11. Obtener la edad media de los ciclistas que han ganado alguna etapa. media_edad_ganadores 30,952380952381 12. Obtener el nombre de los puertos de montaña que tienen una altura superior a la altura media de todos los puertos. nompuerto Arcalis Cerler-Circo de Ampriu Coll de Ordino Cruz de la Demanda Navacerrada Puerto de la Morcuera Sierra Nevada 13. Obtener las poblaciones de salida y de llegada de las etapas donde se encuentran los puertos con mayor pendiente. Igualada salida Andorra llegada 14. Obtener el dorsal y el nombre de los ciclistas que han ganado los puertos de mayor altura. dorsal nombre 9 Massimo Podenzana 26 Mikel Zarrabeitia 15. Obtener los datos de las etapas cuyos puertos (todos) superan los 1300 metros de altura. numetapa kms salida llegada dorsal 2 180 Valladolid Salamanca 36 11 195 ANDorra Estación de Cerler 65 19 190 Ávila Destilerias Dyc 2 16. Obtener la edad del ciclista más joven, la del más veterano y la edad media de los ciclistas que han participado en la vuelta. menor_edad mayor_edad media_edad 23 37 29,89 17. Obtener el nombre del equipo y el director del ciclista que ganó la etapa más larga. Moreno Argentin director 4

18. Obtener el dorsal y el nombre de los ciclistas que hayan ganado alguna etapa, mostrando el número de etapas que han ganado. dorsal nombre etapas_ganadas 27 Laurent Jalabert 2 1 Miguel Induráin 2 35 Erik Dekker 1 2 Pedro Delgado 3 36 Gian Matteo Fagnini 1 4 Tony Rominger 1 52 Vladislav Bobrik 1 5 Gert-Jan Theunisse 1 65 Pascal Lino 1 8 Jean Van Poppel 1 83 Hernan Buenahora 1 10 Mario Cipollini 1 86 Juan Martinez Oliver 1 12 Alessio Di Basco 2 93 Bo Hamburger 1 22 Giorgio Furlan 1 Total : 16 filas 19. Obtener el nombre de los ciclistas que pertenecen a un equipo de más de cinco ciclistas y que han ganado alguna etapa, indicando también cuántas etapas han ganado. dorsal nombre num_etapas_ganadas 1 Miguel Induráin 2 2 Pedro Delgado 3 4 Tony Rominger 1 5 Gert-Jan Theunisse 1 10 Mario Cipollini 1 22 Giorgio Furlan 1 36 Gian Matteo Fagnini 1 52 Vladislav Bobrik 1 83 Hernan Buenahora 1 86 Juan Martinez Oliver 1 93 Bo Hamburger 1 Total : 11 filas 20. Nombre y equipo de los ciclistas que han llevado alguna vez el maillot amarillo, indicando durante cuántas etapas lo han llevado. nombre Num_veces Alex Zulle ONCE 2 Melchor Mauri 3 Miguel Induráin 10 Mikel Zarrabeitia 2 Pedro Delgado 3 Tony Rominger Mapei-Clas 1 21. Por cada equipo, color de los maillots que han llevado sus ciclistas. color Gatorade blanco y Amore Vita rosa Artiach rosa Artiach verde Jolly Club amarillo Lotus Festina rosa blanco y Mapei-Clas amarillo Mapei-Clas rosa Mercatone Uno rosa verde ONCE amarillo Bresciali-Refin ONCE verde Carrera blanco y Seguros Amaya rosa Castorama estrellas moradas TVM Total : 23 filas 5

22. Nombre y equipo del ganador de la vuelta (es decir, el que ha lucido el maillot amarillo en la última etapa). nombre Miguel Induráin 23. Nombre de los equipos que no han llevado el maillot amarillo. Amore Vita Artiach Bresciali-Refin Carrera Castorama Euskadi Gatorade Jolly Club Kelme Lotus Festina Mercatone Uno Motorola Navigare PDM Seguros Amaya Telecom TVM Wordperfect Total : 19 filas 24. Nombre y dorsal de los ciclistas mayores de 30 años que han ganado algún puerto, junto con el número de puertos que han ganado. dorsal nombre edad numpuertos 1 Miguel Induráin 32 1 2 Pedro Delgado 35 4 9 Massimo Podenzana 34 1 25 Gianni Bugno 32 1 25. Nombre y director de los equipos que, en alguna etapa, sus ciclistas han llevado tres o más maillots. Miguel Echevarria director 26. Nombre de los equipos que sólo tienen ciclistas menores de 28 años. Euskadi 27. Dorsal y nombre del ciclista que ha llevado el maillot amarillo durante más etapas. dorsal nombre 1 Miguel Induráin 6

Soluciones a las consultas SQL 1. Nombre y el equipo de aquellos corredores menores de 30 años que han ganado alguna etapa. Una forma: Otra forma: SELECT DISTINCT nombre, FROM Ciclista C, Etapa E WHERE edad < 30 AND C.dorsal=E.dorsal; SELECT DISTINCT nombre, FROM Ciclista WHERE edad < 30 AND dorsal IN ( SELECT DISTINCT dorsal FROM Etapa); 2. Nombre y equipo de los corredores mayores de 35 años que han ganado algún puerto. Una forma: Otra forma: SELECT DISTINCT nombre, FROM Ciclista C, Puerto P WHERE C.dorsal=P.dorsal AND edad>32; SELECT DISTINCT nombre, FROM Ciclista WHERE edad>32 AND dorsal IN (SELECT DISTINCT dorsal FROM Puerto); 3. Datos de las etapas que pasan por algún puerto de montaña y que tienen salida y llegada en la misma población. Una forma: Otra forma: SELECT DISTINCT E.numetapa, E.kms, E.salida, E.llegada, E.dorsal FROM Etapa E, Puerto P WHERE E.numetapa = P.numetapa AND E.salida = E.llegada; SELECT * FROM Etapa WHERE salida=llegada AND numetapa IN ( SELECT numetapa FROM Puerto ); 4. Poblaciones que tienen la meta de alguna etapa, pero desde las que no se realiza ninguna salida. Con MINUS (válida para Oracle, no para Access ni Base): SELECT llegada FROM Etapa MINUS SELECT salida FROM Etapa; Con NOT IN (también es válida con <>ALL): SELECT DISTINCT llegada FROM Etapa WHERE llegada NOT IN (SELECT salida FROM Etapa); 7

5. Nombre y el equipo de los ciclistas que han ganado alguna etapa llevando el maillot amarillo, mostrando también el número de etapa. SELECT C.nombre, C., E.numetapa FROM Ciclista C, Etapa E, Lleva LL, Maillot M WHERE E.dorsal=LL.dorsal AND E.numetapa=LL.numetapa AND LL.código=M.código AND M.color= 'amarillo' AND E.dorsal=C.dorsal; 6. Poblaciones de salida y de llegada de las etapas donde se encuentran puertos con altura superior a 1300 metros. SELECT DISTINCT salida, llegada FROM Etapa E, Puerto P WHERE E.numetapa = P.numetapa AND altura>1300 ; 7. Número de las etapas que tienen algún puerto de montaña, indicando cuántos tiene cada una de ellas. SELECT numetapa, COUNT(*) AS numero_puertos FROM Puerto GROUP BY numetapa ; 8. Nombre y edad de los ciclistas que han llevado dos o más maillots en una misma etapa. SELECT DISTINCT LL.dorsal, C.nombre, C.edad FROM Ciclista C, Lleva LL WHERE C.dorsal=LL.dorsal GROUP BY LL.numetapa, LL.dorsal, C.nombre, C.edad HAVING COUNT(*)>=2; 9. Obtener el nombre y el equipo de los ciclistas que han llevado algún maillot o que han ganado algún puerto. Una forma (para Oracle): SELECT C.nombre, C. FROM Ciclista C, Lleva LL WHERE C.dorsal=LL.dorsal UNION SELECT C.nombre,C. FROM Ciclista C, Puerto P WHERE C.dorsal=P.dorsal; Y otra forma (para Access y Base): SELECT nombre, FROM Ciclista WHERE dorsal IN (SELECT dorsal FROM Lleva) OR dorsal IN (SELECT dorsal FROM Puerto) ; 10. Obtener los números de las etapas que no tienen puertos de montaña. Una forma (para Oracle): SELECT numetapa FROM Etapa MINUS SELECT numetapa FROM Puerto; 8

Otra forma (para Access y Base): SELECT numetapa FROM Etapa WHERE numetapa NOT IN (SELECT numetapa FROM Puerto); 11. Obtener la edad media de los ciclistas que han ganado alguna etapa. SELECT AVG(C.edad) AS media_edad_ganadores FROM Ciclista C, Etapa E WHERE C.dorsal = E.dorsal ; 12. Obtener el nombre de los puertos de montaña que tienen una altura superior a la altura media de todos los puertos. SELECT nompuerto FROM Puerto WHERE altura > ( SELECT AVG(altura) FROM Puerto ) ; 13. Obtener las poblaciones de salida y de llegada de las etapas donde se encuentran los puertos con mayor pendiente. Una forma: SELECT salida, llegada FROM Etapa E, Puerto P WHERE E.numetapa = P.numetapa AND P.pendiente = ( SELECT MAX(pendiente) FROM Puerto ) ; Otra forma: SELECT DISTINCT E.salida, E.llegada FROM Etapa E, Puerto P WHERE E.numetapa = P.numetapa AND P.pendiente >= ALL( SELECT pendiente FROM Puerto ) ; 14. Obtener el dorsal y el nombre de los ciclistas que han ganado los puertos de mayor altura. Una forma: Otra forma: SELECT DISTINCT C.dorsal, C.nombre FROM Ciclista C, Puerto P WHERE C.dorsal = P.dorsal AND P.altura = ( SELECT MAX(altura) FROM Puerto) ; SELECT DISTINCT C.dorsal,C.nombre FROM Puerto P, Ciclista C WHERE P.dorsal=C.dorsal AND P.altura >= ALL(SELECT altura FROM Puerto) ; 15. Obtener los datos de las etapas cuyos puertos (todos) superan los 1300 metros de altura. Con la diferencia (para Oracle):: SELECT E.* FROM Puerto P, Etapa E WHERE P.numetapa=E.numetapa AND P.altura>1300 9

MINUS SELECT E.* FROM Puerto P, Etapa E WHERE P.numetapa=E.numetapa AND P.altura<=1300 ; Con el NOT IN (para Access y Base): SELECT DISTINCT E.* FROM Puerto P, Etapa E WHERE P.numetapa=E.numetapa AND P.altura>1300 AND E.numetapa NOT IN ( SELECT numetapa FROM Puerto WHERE altura<=1300) ; 16. Obtener la edad del ciclista más joven, la del más veterano y la media de edad de los ciclistas que han participado en la vuelta. SELECT MIN(edad) AS menor_edad, MAX(edad) AS mayor_edad, AVG(edad) AS media_edad FROM Ciclista ; 17. Obtener el nombre del equipo y el director del ciclista que ha ganado la etapa más larga. Una forma: SELECT director, Q. FROM Etapa E, Ciclista C, Equipo Q WHERE E.dorsal = C.dorsal AND C. = Q. AND kms = (SELECT MAX(kms) FROM Etapa); Y otra forma: SELECT TOP(1) director, Q. FROM Etapa E, Ciclista C, Equipo Q WHERE E.dorsal = C.dorsal AND C. = Q. ORDER BY kms DESC; ( La cláusula TOP especifica que sólo se devolverá el primer conjunto de filas del resultado de la consulta.top(1) mostrará la primera fila, TOP(10) mostrará las 10 primeras filas ) 18. Obtener el dorsal y el nombre de los ciclistas que hayan ganado alguna etapa, mostrando también el número de etapas que han ganado. SELECT E.dorsal, C.nombre, COUNT(E.dorsal) AS etapas_ganadas FROM Etapa E, Ciclista C WHERE C.dorsal=E.dorsal GROUP BY E.dorsal, C.nombre; 19. Obtener el nombre de los ciclistas que pertenecen a un equipo de más de cinco ciclistas y que han ganado alguna etapa, indicando también cuántas etapas han ganado. SELECT C.dorsal, C.nombre, COUNT(*) AS num_etapas_ganadas FROM Ciclista C, Etapa E WHERE C.dorsal=E.dorsal AND C. IN ( SELECT FROM Ciclista GROUP BY HAVING COUNT(*)>5 ) GROUP BY C.dorsal, C.nombre ; 10

20. Nombre y equipo de los ciclistas que han llevado alguna vez el maillot amarillo, indicando durante cuántas etapas lo han llevado. SELECT DISTINCT C.nombre, C., COUNT (*) AS Num_veces FROM Ciclista C, Lleva L, Maillot M WHERE C.dorsal=L.dorsal AND L.código=M.código AND color= 'amarillo' GROUP BY C.nombre, C.; 21. Por cada equipo, color de los maillots que han llevado sus ciclistas. SELECT, color FROM Maillot M, Lleva L, Ciclista C WHERE M.código=L.código AND L.dorsal=C.dorsal GROUP BY,color; 22. Nombre y equipo del ganador de la vuelta (es decir, el que ha lucido el maillot amarillo en la última etapa). SELECT C.nombre, C. FROM Ciclista AS C, Lleva AS L, Maillot AS M WHERE C.dorsal = L.dorsal AND M.código = L.código AND color='amarillo' AND L.numetapa = (SELECT MAX(numetapa) FROM Etapa); 23. Nombre de los equipos que no han llevado el maillot amarillo. SELECT DISTINCT FROM Equipo WHERE NOT IN ( SELECT DISTINCT FROM Ciclista C, Lleva L, Maillot M WHERE C.dorsal=L.dorsal AND L.código=M.código AND color='amarillo' ); 24. Nombre y dorsal de los ciclistas mayores de 30 años que han ganado algún puerto, junto con el número de puertos que han ganado. SELECT C.dorsal, nombre, edad, COUNT(*) AS numpuertos FROM Ciclista AS C, Puerto AS P WHERE C.dorsal=P.dorsal AND edad>30 GROUP BY C.dorsal, nombre, edad; 25. Nombre y director de los equipos que, en alguna etapa, sus ciclistas han llevado tres o más maillots. SELECT DISTINCT E., E.director FROM Ciclista AS C, Equipo AS E, Lleva AS L WHERE C.dorsal=L.dorsal AND C.=E. GROUP BY L.numetapa, E., E.director HAVING COUNT(*)>=3; 26. Nombre de los equipos que sólo tienen ciclistas menores de 28 años. SELECT FROM Equipo WHERE IN (SELECT FROM Ciclista WHERE edad <28) AND NOT IN (SELECT FROM Ciclista WHERE edad>=28); 11

27. Dorsal y nombre del ciclista que ha llevado el maillot amarillo durante más etapas. Con ALL: Con TOP : SELECT C.dorsal, C.nombre FROM Ciclista AS C, Lleva AS L, Maillot AS M WHERE C.dorsal=L.dorsal AND M.código=L.código AND M.color='amarillo' GROUP BY C.dorsal, C.nombre HAVING COUNT(*) >= ALL ( SELECT COUNT(*) AS veces FROM Lleva LL, Maillot MA WHERE LL.código = MA.código AND MA.color='amarillo' GROUP BY LL.dorsal ); SELECT TOP(1) dorsal, nombre FROM Ciclista AS C, Lleva AS L, Maillot AS M WHERE C.dorsal=L.dorsal AND M.código=L.código AND M.color='amarillo' GROUP BY C.dorsal, C.nombre ORDER BY COUNT(*) DESC; 12