Soluzione Verifica Query 3H – 2017

VERIFICA INFORMATICA

Dato il seguente schema relazionale

calciatori(idCalciatore, nome, cognome, ruolo, età, squadra)

 

risultati(idRisultato, idCalciatorecalciatori, goalFatti, squadraInCasa, squadraFuoriCasa)

 

realizzare le seguenti query in SQL:

 

QUERY DI SELEZIONE

 1. Visualizzare nome, cognome e goalFatti in ogni partita dai calciatori della Juventus

SELECT         calciatori.nome, calciatori.cognome, risultati.goalFatti

FROM            calciatori, risultati

WHERE         calciatori.idCalciatore=risultati.idCalciatore AND calciatori.squadra=”Juventus”

 

2. Visualizzare i goalFatti in casa dalla Juventus

SELECT         SUM(goalFatti)

FROM            risultati

WHERE         squadraIncasa=”Juventus”

 

 

QUERY DI RAGGRUPPAMENTO

3. Per ogni giocatore visualizzare il numero di goal fatti in campionato

SELECT         idGiocatore, SUM(goalFatti)

FROM            risultati

GROUP BY   idCalciatore

 

4. Per ogni squadra visualizzare la classifica dei goal fatti in casa

Soluzione 1

SELECT         calciatori.squadra, SUM(risultati.goalFatti) AS GOALfattiInCasa

FROM            risultati, calciatori

WHERE         calciatori.squadra=risultati.squadraInCasa

GROUP BY   calciatori.squadra

ORDER BY   GOALfattiInCasa AS DESC

 

Soluzione 2

SELECT         squadraInCasa, SUM(goalFatti) AS GoalFattiInCasa

FROM            risultati

GROUP BY   squadraInCasa

ORDER BY   goalFattiInCasa AS DESC

 

5. Come è possibile gestire la classifica dei goal fatti da ogni squadra (sia in casa che fuori casa)

Progettazione

Per generare la classifica dei goal fatti da ogni squadra occorre raggruppare i calciatori per squadra e in ogni raggruppamento formato sommare i goal fatti da ogni giocatore. Dovendo ricavare le informazioni da entrambe le tabelle occorre realizzare un legame (JOIN) fra il campo idCalciatori della tabella calciatori (PK) e idCalciatori della tabella risultati (FK).

I campi squadraInCasa e squadraFuoriCasa della tabella risultati sono ridondanti.

 

Realizzazione

SELECT         calciatori.squadra, SUM(risultati.goalFatti) AS goalFatti

FROM            calciatori, risultati

WHERE         calciatori.idCalciatore=risultati.idCalciatore

GROUP BY   calciatori.squadra

ORDER BY   goalFatti AS DESC