Está en la página 1de 2

Bases de Datos

Práctica 2 (Curso 2020-2021)

Normativa
1. Dispone de 1 hora para la realización del examen.

2. Cualquier indicio de copia resultará en un 0 en el examen y la perdida de la evaluación


continua.
3. Se puede utilizar el ordenador del aula o un portátil para resolver las consultas que
aparecen en el enunciado.

MODELO C: Examen práctica 2 - SQL


1. Obtener el nombre y apellidos de los pilotos y el número de vueltas totales recorridas
en el año 2011 siempre y cuando sea mayor que la media del número de vueltas totales
recorridas el año anterior por todos los pilotos.

-------- SOLUCIÓN PROPUESTA ----------


SELECT drivers.forename, drivers.surname, SUM(results.laps) nlaps
FROM (drivers INNER JOIN results ON drivers.driverId=results.driverId)
INNER JOIN races ON results.raceId=races.raceId
WHERE races.year=2011
GROUP BY drivers.driverId
HAVING nlaps > (SELECT AVG(results.laps)
FROM results INNER JOIN races on results.raceId=races.raceId
WHERE races.year=2010)

2. Obtener el nombre y año de las carreras para las que existe una clasificación (qualifying)
en las que no se realizaron pitstops.

-------- SOLUCIÓN PROPUESTA ----------


SELECT DISTINCT races.name, races.year, races.raceId
FROM ((circuits INNER JOIN races ON circuits.circuitId=races.circuitId) INNER JOIN qualifying ON
,→ races.raceId=qualifying.raceId)
WHERE races.raceId NOT IN (SELECT races.raceId
FROM races INNER JOIN pitstops ON races.raceId=pitstops.raceId
)

3. Obtener la nacionalidad de los pilotos que han disputado todas las ediciones del gran
premio ’Australian Grand Prix’.

-------- SOLUCIÓN PROPUESTA ----------


SELECT drivers.nationality
FROM drivers
WHERE NOT EXISTS ( SELECT *
FROM races
WHERE name="Australian Grand Prix" AND NOT EXISTS (SELECT raceId
FROM results
WHERE drivers.driverId =
,→ results.driverId AND
,→ results.raceId=races.raceId)
);

4. Crea un procedimiento almacenado para obtener los pilotos y los circuitos que ganaron
carreras de un año concreto (como argumento) con un constructor del mismo paı́s que
el piloto.

-------- SOLUCIÓN PROPUESTA ----------


DROP PROCEDURE pilots_win_home_constructor_year;

Práctica 2: Structured Query Language 1


Bases de Datos
Práctica 2 (Curso 2020-2021)

DELIMITER $$
CREATE PROCEDURE pilots_win_home_constructor_year(IN year_win INTEGER)
BEGIN
SELECT DISTINCT drivers.forename, drivers.surname, circuits.name
FROM drivers INNER JOIN results ON drivers.driverId = results.driverId INNER JOIN races ON
,→ results.raceId=races.raceId INNER JOIN constructors ON
,→ results.constructorId=constructors.constructorId INNER JOIN circuits ON
,→ circuits.circuitId=races.circuitId
WHERE results.positionOrder=1 AND races.year=year_win AND
,→ drivers.nationality=constructors.nationality;
END$$

DELIMITER ;

CALL pilots_win_home_constructor_year(2010);

Esta obra está bajo una licencia Creative Commons


“Reconocimiento-NoCommercial-CompartirIgual 4.0 Inter-
nacional”.

Práctica 2: Structured Query Language 2

También podría gustarte