1) TABLAS SQL
Create table Equipo(
Nombre char(30) PRIMARY KEY,
Director char(30),
Nacionalidad char(30)
);
Create table Ciclista(
DNI int PRIMARY KEY,
Nombre char(30),
Fecha_nacimiento date
);
Create table Edicion(
Año int PRIMARY KEY,
Fecha_inicio date,
Fecha_fin date,
Etapas char(30)
);
Create table Puerto_Montaña(
Nombre char(30) PRIMARY KEY,
Carretera char(30),
Categoria char(30),
Km_carretera char(30)
);
Create table Equipo_Ciclista(
Nombre_foraneo char(30),
DNI_foraneo int,
Periodo int,
Fecha_inicio date,
Fecha_fin date,
PRIMARY key (Nombre_foraneo,DNI_foraneo),
FOREIGN KEY (Nombre_foraneo) REFERENCES Equipo (Nombre),
FOREIGN KEY (DNI_foraneo) REFERENCES Ciclista (DNI)
);
Create table Edicion_Equipo(
Puesto char(30),
Tiempo int,
Año_foraneo int,
Nombre_equipo_foraneo char(30),
PRIMARY KEY (Año_foraneo,Nombre_equipo_foraneo),
FOREIGN KEY (Año_foraneo) REFERENCES Edicion (Año),
FOREIGN KEY (Nombre_equipo_foraneo) REFERENCES Equipo (Nombre)
);
Create table Etapa(
Cod_etapa int,
Año_foraneo int,
Ciudad_destino char(30),
Ciudad_origen char(30),
Kilometros int,
Tipo char(30),
Fecha date,
PRIMARY KEY (Cod_etapa,Año_foraneo)
FOREIGN KEY (Año_foraneo) REFERENCES Edicion (Año)
);
Create table Edicion_Ciclista(
DNI_foraneo int,
Año_foraneo int,
Clasificacion_montaña char(30),
Tiempo_en_la_general int,
PRIMARY KEY (DNI_foraneo,Año_foraneo),
FOREIGN KEY (DNI_foraneo) REFERENCES Cilista (DNI),
FOREIGN KEY (DNI_foraneo) REFERENCES Cilista (DNI)
);
Create table Etapa_Ciclista(
DNI_foraneo int,
Cod_etapa_foraneo int,
Tiempo_obtenido int,
primary key (DNI_foraneo,Cod_etapa_foraneo),
FOREIGN KEY (DNI_foraneo) REFERENCES Ciclista (DNI),
FOREIGN KEY (Cod_etapa_foraneo) REFERENCES Etapa(Cod_etapa)
);
Create table Tramo(
Cod_tramo int,
Cod_etapa_foraeno int,
Carretra char(30),
Km_inicial char(30),
Km_final char(30),
PRIMARY key (Cod_tramo,Cod_etapa_foraeno),
FOREIGN KEY (Cod_etapa_foraeno) REFERENCES Etapa (Cod_etapa)
);
Create table Etapa_Cilista_Puerto_Montaña(
Puesto char(30),
Cod_etapa_foraneo int,
DNI_foraneo int,
Nombre_foraneo char(30),
PRIMARY KEY (Cod_etapa_foraneo,DNI_foraneo,Nombre_foraneo),
FOREIGN KEY (Cod_etapa_foraneo) REFERENCES Etapa(cod_etapa),
FOREIGN KEY (DNI_foraneo) REFERENCES Ciclista(DNI),
FOREIGN KEY (Nombre_foraneo) REFERENCES Puerto_Montaña(Nombre)
);
Create table Etapa_Puerto_Montaña(
Cod_etapa_foraneo int,
Nombre_foraneo char(30),
Km_etapa char(30),
PRIMARY key (Cod_etapa_foraneo,Nombre_foraneo),
FOREIGN KEY (Cod_etapa_foraneo) REFERENCES Etapa (Cod_etapa),
FOREIGN KEY (Nombre_foraneo) REFERENCES Puerto_Montaña (Nombre)
);
2) DATOS INSERTADOS
-- Insertar datos en la tabla Equipo
INSERT INTO Equipo (Nombre, Director, Nacionalidad)
VALUES ('Equipo A', 'Director A', 'Nacionalidad A'),
('Equipo B', 'Director B', 'Nacionalidad B'),
('Equipo C', 'Director C', 'Nacionalidad C');
-- Insertar datos en la tabla Ciclista
INSERT INTO Ciclista (DNI, Nombre, Fecha_nacimiento)
VALUES (1, 'Ciclista A', '1990-01-01'),
(2, 'Ciclista B', '1985-03-15'),
(3, 'Ciclista C', '1992-07-20');
-- Insertar datos en la tabla Edicion
INSERT INTO Edicion (Año, Fecha_inicio, Fecha_fin, Etapas)
VALUES (2021, '2021-07-01', '2021-07-21', 'Etapas A'),
(2022, '2022-06-30', '2022-07-20', 'Etapas B'),
(2023, '2023-07-05', '2023-07-25', 'Etapas C');
-- Insertar datos en la tabla Puerto_Montaña
INSERT INTO Puerto_Montaña (Nombre, Carretera, Categoria, Km_carretera)
VALUES ('Puerto A', 'Carretera A', 'Categoria A', '50 km'),
('Puerto B', 'Carretera B', 'Categoria B', '30 km'),
('Puerto C', 'Carretera C', 'Categoria C', '40 km');
-- Insertar datos en la tabla Equipo_Ciclista
INSERT INTO Equipo_Ciclista (Nombre_foraneo, DNI_foraneo, Periodo, Fecha_inicio,
Fecha_fin)
VALUES ('Equipo A', 1, 2021, '2021-01-01', '2021-12-31'),
('Equipo B', 2, 2022, '2022-01-01', '2022-12-31'),
('Equipo C', 3, 2023, '2023-01-01', '2023-12-31');
-- Insertar datos en la tabla Edicion_Equipo
INSERT INTO Edicion_Equipo (Puesto, Tiempo, Año_foraneo, Nombre_equipo_foraneo)
VALUES ('Primer puesto', 150, 2021, 'Equipo A'),
('Segundo puesto', 160, 2022, 'Equipo B'),
('Tercer puesto', 155, 2023, 'Equipo C');
-- Insertar datos en la tabla Etapa
INSERT INTO Etapa (Cod_etapa, Año_foraneo, Ciudad_destino, Ciudad_origen, Kilometros,
Tipo, Fecha)
VALUES (1, 2021, 'Destino A', 'Origen A', 100, 'Tipo A', '2021-07-02'),
(2, 2022, 'Destino B', 'Origen B', 120, 'Tipo B', '2022-07-10'),
(3, 2023, 'Destino C', 'Origen C', 90, 'Tipo C', '2023-07-15');
-- Insertar datos en la tabla Edicion_Ciclista
INSERT INTO Edicion_Ciclista (DNI_foraneo, Año_foraneo, Clasificacion_montaña,
Tiempo_en_la_general)
VALUES (1, 2021, 'Montaña A', 800),
(2, 2022, 'Montaña B', 810),
(3, 2023, 'Montaña C', 795);
-- Insertar datos en la tabla Etapa_Ciclista
INSERT INTO Etapa_Ciclista (DNI_foraneo, Cod_etapa_foraneo, Tiempo_obtenido)
VALUES (1, 1, 120),
(2, 2, 125),
(3, 3, 118);
-- Insertar datos en la tabla Tramo
INSERT INTO Tramo (Cod_tramo, Cod_etapa_foraeno, Carretra, Km_inicial, Km_final)
VALUES (1, 1, 'Carretera A', '0 km', '20 km'),
(2, 2, 'Carretera B', '10 km', '25 km'),
(3, 3, 'Carretera C', '5 km', '18 km');
-- Insertar datos en la tabla Etapa_Cilista_Puerto_Montaña
INSERT INTO Etapa_Cilista_Puerto_Montaña (Puesto, Cod_etapa_foraneo, DNI_foraneo,
Nombre_foraneo)
VALUES ('Primer puesto', 1, 1, 'Puerto A'),
('Segundo puesto', 2, 2, 'Puerto B'),
('Tercer puesto', 3, 3, 'Puerto C');
Consulta 1: Obtener el nombre del ciclista, la ciudad de destino y el puesto en la etapa
donde obtuvieron el mejor resultado
SELECT C.Nombre, E.Ciudad_destino, EP.Puesto
FROM Ciclista C
JOIN Etapa_Ciclista EP ON C.DNI = EP.DNI_foraneo
JOIN Etapa E ON E.Cod_etapa = EP.Cod_etapa_foraneo
WHERE EP.Tiempo_obtenido = (SELECT MIN(Tiempo_obtenido) FROM Etapa_Ciclista WHERE
DNI_foraneo = C.DNI);
Consulta 2: Obtener el nombre del equipo y la cantidad de ciclistas que tiene en cada
edición.
SELECT EC.Nombre_equipo_foraneo, COUNT(EC.DNI_foraneo) AS Cantidad_Ciclistas
FROM Equipo_Ciclista EC
GROUP BY EC.Nombre_equipo_foraneo;
Consulta 3: Obtener el nombre del equipo, el nombre del ciclista y el tiempo obtenido en
una etapa específica.
SELECT EC.Nombre_foraneo, C.Nombre, EC.Tiempo_obtenido
FROM Etapa_Ciclista EC
JOIN Ciclista C ON C.DNI = EC.DNI_foraneo
WHERE EC.Cod_etapa_foraneo = 1;
Consulta 4: Obtener el nombre del equipo, el nombre del ciclista y el puesto en la etapa
de montaña.
SELECT EC.Nombre_foraneo, C.Nombre, EMC.Puesto
FROM Etapa_Ciclista_Puerto_Montaña EMC
JOIN Ciclista C ON C.DNI = EMC.DNI_foraneo
JOIN Etapa E ON E.Cod_etapa = EMC.Cod_etapa_foraneo
JOIN Equipo_Ciclista EC ON EC.DNI_foraneo = EMC.DNI_foraneo AND EC.Nombre_foraneo =
EMC.Nombre_foraneo;
Consulta 5: Obtener el nombre del equipo, el nombre del ciclista y el tipo de etapa en la
que participaron.
SELECT EC.Nombre_foraneo, C.Nombre, E.Tipo
FROM Etapa_Ciclista EC
JOIN Ciclista C ON C.DNI = EC.DNI_foraneo
JOIN Etapa E ON E.Cod_etapa = EC.Cod_etapa_foraneo;
Consulta 6: Obtener el nombre del equipo, la ciudad de origen y la ciudad de destino de
todas las etapas en las que participaron
SELECT EC.Nombre_foraneo, E.Ciudad_origen, E.Ciudad_destino
FROM Etapa_Ciclista EC
JOIN Etapa E ON E.Cod_etapa = EC.Cod_etapa_foraneo;
Consulta 7: Obtener el nombre del equipo, el nombre del ciclista y la clasificación en la
montaña en una edición específica.
SELECT EC.Nombre_foraneo, C.Nombre, EC.Clasificacion_montaña
FROM Edicion_Ciclista EC
JOIN Ciclista C ON C.DNI = EC.DNI_foraneo
WHERE EC.Año_foraneo = 2022;
Consulta 8: Obtener el nombre del equipo, el nombre del ciclista y el nombre del puerto
de montaña en el que participaron.
SELECT EC.Nombre_foraneo, C.Nombre, PM.Nombre
FROM Etapa_Cilista_Puerto_Montaña EC
JOIN Ciclista C ON C.DNI = EC.DNI_foraneo
JOIN Puerto_Montaña PM ON PM.Nombre = EC.Nombre_foraneo;
Consulta 9: Obtener el nombre del equipo, la ciudad de origen y la ciudad de destino de
todas las etapas de una edición específica.
SELECT EE.Nombre_equipo_foraneo, E.Ciudad_origen, E.Ciudad_destino
FROM Edicion_Equipo EE
JOIN Etapa E ON E.Año_foraneo = EE.Año_foraneo;
Consulta 10: Obtener el nombre del ciclista, el nombre del equipo y la clasificación
obtenida en una edición específica.
SELECT C.Nombre, EC.Nombre_foraneo, EC.Puesto
FROM Edicion_Ciclista EC
JOIN Ciclista C ON C.DNI = EC.DNI_foraneo
WHERE EC.Año_foraneo = 2023;