Si consideri il seguente schema di base di dati relativo ad una porzione di un ipotetico sistema di gestione del calendario dei Mondiali di Calcio 2018
STADIO(Nome, Città, Capienza) SQUADRA(Nazione, Data_qualifica, Capitano, Mondiali_vinti) PARTITA(Stadio, Data, Squadra1,Squadra2, Goal1, Goal2, Spettatori) GIOCATORE(Codice, Nome, Cognome, Squadra, Età, Ruolo)
Goal1 e Goal2 indicano i goal segnati durante una partita dalle due squadre che si sfidano (squadra1 e squadra2)
Identificare le chiavi esterne presenti nello schema indicando, per ognuna di esse, relazione referente e riferita
SQUADRA(Nazione, Data_qualifica, Capitano(GIOCATORE), Mondiali_vinti) PARTITA(Stadio(STADIO), Data, Squadra1(SQUADRA), Squadra2(SQUADRA), Goal1, Goal2, Spettatori) GIOCATORE(Codice, Nome, Cognome, Squadra(SQUADRA), Età, Ruolo)
Scrivere i comandi SQL per:
Creare una vista che contenga il nome delle squadre il cui capitano ha meno di 20 anni
CREATE VIEW vista1 AS
SELECT Nazione
FROM SQUADRA JOIN GIOCATORE ON (Capitano = Codice)
WHERE Età < 20
Aggiungere un vincolo che stabilisca che l’età di un giocatore non può essere inferiore a 17 anni
ALTER TABLE GIOCATORE ADD CONSTRAINT vincoloEtà
CHECK(Età >= 17)
Aumentare di una unità il numero di mondiali vinti dal Belgio
UPDATE SQUADRA
SET Mondiali_vinti = Mondiali_vinti + 1
WHERE Nazione = 'Belgio'
Il nome delle squadre che non hanno mai disputato una gara finita 0 a 0
SELECT Nazione FROM SQUADRA WHERE Nazione NOT IN(
SELECT Squadra1 FROM PARTITA WHERE Goal1 = 0 AND Goal2 = 0
)AND Nazione NOT IN (
SELECT Squadra2 FROM PARTITA WHERE Goal1 = 0 AND Goal2 = 0
)
Le nazionali che hanno vinto almeno 3 mondiali e con almeno 5 giocatori con ruolo attaccante di età compresa tra 20 e 25 anni.
SELECT Nazione FROM Squadra WHERE Mondiali_vinti >= 3 AND
NAZIONE IN(
SELECT Squadra FROM GIOCATORE WHERE Ruolo = 'Attaccante'
AND Età BETWEEN 20 AND 25
GROUP BY Squadra
HAVING COUNT(*) >= 5
)
Lo stadio che ha ospitato partite della nazionale dell’Uruguay e della Francia ma mai della Germania
SELECT Nome
FROM STADIO JOIN PARTITA ON (Nome = Stadio)
WHERE Squadra1 = 'Uruguay' OR Squadra2 = 'Uruguay'
INTERSECT
SELECT Nome
FROM STADIO JOIN PARTITA ON (Nome = Stadio)
WHERE Squadra1 = 'Francia' OR Squadra2 = 'Francia'
EXCEPT
SELECT Nome
FROM STADIO JOIN PARTITA ON (Nome = Stadio)
WHERE Squadra = 'Germania' OR Squadra2 = 'Germania'
Il nome e la città degli stadi dove si sono giocate le partite con più goal
SELECT Nome, Città
FROM STADIO JOIN PARTITA ON (Nome = Stadio)
WHERE (Goal1 + Goal2) >= ALL(
SELECT Goal1 + Goal2 FROM PARTITA
);