Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

ModeloG (Solucion)

Descargar como pdf o txt
Descargar como pdf o txt
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 G: Examen práctica 2 - SQL


1. Codifique una consulta que obtenga el nombre de los constructores italianos (nationality
= ’Italian’) con los que hayan disputado carreras al menos un piloto italiano:

SELECT name
FROM constructors
WHERE nationality LIKE ('Italian')
AND EXISTS (SELECT *
FROM results
INNER JOIN drivers ON drivers.driverId = results.resultId
WHERE results.constructorId = constructors.constructorId
AND drivers.nationality = constructors.nationality)

2. Codifique una consulta que obtenga el nombre y apellidos del piloto que más accidentes
(status.status = ’Accident’) ha tenido. Mostrar también el número de accidentes.

SELECT drivers.forename, drivers.forename, COUNT(*)


FROM drivers
INNER JOIN results ON results.driverId = drivers.driverId
INNER JOIN status ON status.statusId = results.statusId
WHERE status.status LIKE 'Accident'
GROUP BY drivers.driverId, drivers.forename, drivers.surname
HAVING COUNT(*) >= ALL (SELECT COUNT(*)
FROM results
INNER JOIN status ON status.statusId = results.statusId
WHERE status.status LIKE 'Accident'
GROUP BY results.driverId)

3. Codifique una consulta que obtenga el nombre y apellidos de los pilotos que hayan
calificado entre los 10 primeros puestos (position <= 10) de todas las carreras del
año 2015.

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


SELECT drivers.forename, drivers.surname
FROM drivers
WHERE NOT EXISTS (SELECT *
FROM races
WHERE year = 2015
AND NOT EXISTS (SELECT *
FROM qualifying
WHERE position <= 10
AND qualifying.driverId = drivers.driverId
AND qualifying.raceId = races.raceId))

4. Codifique un procedimiento llamado getNumberOfVictories que disponga de un paráme-


tro de entrada type. Si type = ’nationality’, el procedimiento listará el número
de victorias que han obtenido cada una de las nacionalidades de la tabla drivers. Por
contra, si type toma cualquier otro valor, el procedimiento listará el número de victo-
rias que han obtenidos cada uno de los constructores (constructors.name) existentes

Práctica 2: Structured Query Language 1


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

en la base de datos. Los resultados deberá estar ordenados de mayor a menor número
de victorias.

DELIMITER $$
CREATE PROCEDURE getNumberOfVictories (IN type VARCHAR(20))
BEGIN
IF type = 'nationality' THEN
SELECT drivers.nationality, COUNT(*) AS numVictorires
FROM results
INNER JOIN drivers ON drivers.driverId = results.driverId
WHERE results.positionOrder = 1
GROUP BY drivers.nationality
ORDER BY numVictorires DESC;
ELSE
SELECT constructors.name, COUNT(*) AS numVictorires
FROM results
INNER JOIN constructors ON constructors.constructorId = results.constructorId
WHERE results.positionOrder = 1
GROUP BY constructors.name
ORDER BY numVictorires DESC;
END IF;
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