[Basi di Dati]

Messaggioda ~Rose » 07/02/2012, 18:50

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!
Avatar utente
~Rose
Starting Member
Starting Member
 
Messaggi: 41
Iscritto il: 18/05/2011, 17:24

Re: [Basi di Dati]

Messaggioda hamming_burst » 08/02/2012, 23:51

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: ).

Codice: Seleziona tutto
SELECT Gara.Località, Gara.Data
FROM Gara THETA_JOIN(Gara.Nazione=Sciatore.Nazione) Sciatore , Piazzamento
WHERE Gara.Disciplina="Gigante" AND Piazzamento.Posizione = "1"
"Un giorno tutti noi sciocchi saremo morti e allora i vivi andranno avanti. ... tutti gli uomini saranno fratelli e nessuno se ne starà al sole in panciolle a farsi nutrire dai suoi compagni"
[Jack London]

HOFL...che stress!!
Avatar utente
hamming_burst
Moderatore
Moderatore
 
Messaggi: 2271
Iscritto il: 04/07/2009, 10:53


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti