[Basi di Dati]
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!
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
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
).
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

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