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 A: Examen práctica 2 - SQL


1. Obtener el nombre y apellidos de los pilotos que disputaron la carrera de México de
2017 y no han realizado pitstops.

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


SELECT *
FROM drivers
WHERE drivers.driverId NOT IN (SELECT distinct driverId
FROM pitstops JOIN races ON races.raceId = pitstops.raceId
WHERE year = 2017 and races.name='Mexican Grand Prix')
AND drivers.driverId IN (SELECT distinct driverId
FROM races JOIN results ON races.raceId = results.raceId
WHERE year = 2017 and races.name='Mexican Grand Prix')

2. Obtener los nombres y apellidos de los pilotos que han obtenido más de 100 puntos
en alguna temporada (year). También se tiene que devolver en la consulta el total de
puntos obtenidos y la temporada en que se obtuvieron.

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


SELECT forename, surname, year, sum(points)
FROM results NATURAL JOIN drivers NATURAL JOIN races
GROUP BY year, driverid
HAVING sum(points) > 100;

3. Obtener los constructores que participaron en todas las carreras del año 1990.

-------- SOLUCIÓN PROPUESTA DIVISIÓN CON NOT EXISTS ----------


SELECT constructorId
FROM constructors
WHERE NOT EXISTS ( SELECT *
FROM races
WHERE YEAR=1990
AND NOT EXISTS (SELECT raceId
FROM results
WHERE constructors.constructorId = results.constructorId
AND results.raceId=races.raceId)
);

-------- SOLUCIÓN PROPUESTA DIVISIÓN CON HAVING COUNT ----------


SELECT constructorId
FROM constructors
WHERE constructorId IN ( SELECT conductores.constructorId
FROM (SELECT results.constructorId, results.raceId
FROM results INNER JOIN races ON
,→ results.raceId = races.raceId
WHERE YEAR = 1990
GROUP BY results.constructorId, results.raceId) conductores
GROUP BY conductores.constructorId
HAVING COUNT(*) = ( SELECT COUNT(*)
FROM races
WHERE year=1990) )

Práctica 2: Structured Query Language 1


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

4. Procedimiento almacenado de nombre GetsConstructoresYPilotos, que tomando como


entrada un año concreto, obtenga como salida los nombres de todos los pilotos que
participaron en el mundial ese año y el equipo de constructores con el cual compitieron.
Adicionalmente, también se quiere obtener el total de puntos ( results.points ) que
obtuvo cada piloto en el mundial.

DELIMITER //

CREATE PROCEDURE `GetsConstructoresYPilotos` (IN a~


n o year)
BEGIN
SELECT constructors.name, drivers.surname, SUM(results.points)
FROM constructors JOIN results ON constructors.constructorId = results.constructorID
JOIN races ON results.raceId = races.raceId
JOIN drivers ON results.driverId = drivers.driverId
no
WHERE races.`year`= a~
GROUP BY constructors.name, drivers.surname;
END//
DELIMITER ;

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