[Basi di Dati]

~Rose16
Salve a tutti, ho un esame di Basi di dati che vorrei proporvi http://www.mediafire.com/?lz25ooi2mhhkdg5, ho tentato di risolvere il primo esercizio, punto a, b e c riguardante le query.

Potreste darmi qualche dritta? Purtroppo non mi trovo bene con questi argomenti. A voi le mie soluzioni:

A)

SELECT Localita, Data
FROM Gara, Sciatore, Piazzamento
WHERE Disciplina="Gigante" AND
Sciatore.Codice=Piazzamento.Sciatore AND
Gara.Codice=Piazzamento.Gara AND
Sciatore.Nazione=Gara.Nazione AND
Piazzamento.Posizione='1'
GROUP BY Piazzamento.Sciatore

B)

SELECT Nome, Cognome
FROM Sciatore, Piazzamento, Gara
WHERE Sciatore.Codice=Piazzamento.Sciatore AND
Gara.Codice=Piazzamento.Gara AND
GROUP BY Piazzamento.Sciatore
HAVING Sum(classifica_slalom)=SELECT Sum(Punti) as classifica_slalom
FROM Gara, Sciatore, Piazzamento
WHERE Disciplina="Slalom" AND
Sciatore.Codice=Piazzamento.Sciatore AND
Gara.Codice=Piazzamento.Gara)

ORDER BY Sum(Classifica_slalom) DESC, Piazzamento.Sciatore


c)

SELECT Gara.Nazione
FROM Gara, Sciatore, Piazzamento
WHERE Sciatore.Nazione=Gara.Nazione AND
Sciatore.Codice=Piazzamento.Sciatore AND
Gara.Codice=Piazzamento.Gara AND
GROUP BY Gara.Nazione
HAVING max(punteggio)=select max(punteggio)
from(select sum(Punti)as punteggio
from Piazzamento,Sciatore
where Sciatore.Codice=Piazzamento.Codice
group by Piazzamento.sciatore)




Grazie dell'aiuto, ormai non so più da che parte sbattere la testa!

Risposte
hamming_burst
Ciao,
vediamo...


Il primo non capisco perchè le hai raggruppate, non è richiesto. Poi troppi AND secondo me, può essere corretto ma non è efficiente.

Tipo io l'avrei pensata con un JOIN sull'attributo Nazione (il codice SQL prendilo così come generale, non ricordo come si scrive il JOIN con condizione :roll: ).

SELECT Gara.Località, Gara.Data
FROM Gara THETA_JOIN(Gara.Nazione=Sciatore.Nazione) Sciatore , Piazzamento
WHERE Gara.Disciplina="Gigante" AND Piazzamento.Posizione = "1"

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.