SQL-Esercizio con subquery

Arconudo
Buondi a tutti! Qualcuno si intende di SQL?
Vi posto un esercizio
Siano dati i seguenti schemi di relazione

Studente(Matricola, Nome, Cognome, Indirizzo, CAP, Età)

Esami(CodiceCorso, MatricolaStudente,Voto)

Corso(Codice, Nome, Facoltà, NumeroCrediti)

dove le chiavi primarie sono sottolineate.
Scrivere le istruzioni di SQL che permettono di :
1) Visualizzare il nome dell'esame con voto medio più basso e tale voto medio
Io ho provato a risolverlo in tal modo:
SELECT Nome,min(Votomedio)
FROM Corso,( SELECTavg(Voto) AS Votomedio
FROM Esami
GROUP BY CodiceCorso)T
WHERE Corso.Codice=T.CodiceCorso;


ma il libro propone
SELECT nome, avg(voto)
FROM esami, corso
WHERE codicecorso = codice
GROUP BY codicecorso
HAVING avg(voto) = (SELECT min(media) FROM (SELECT avg(voto) as media FROM esami GROUP BY codicecorso)A)

Qualcuno è disposto a spiegarmi se la mia query sia sbagliata o meno?

Risposte
onlyReferee
Ciao Arconudo :!:
Allora, entrambe le soluzioni secondo me sono corrette (lo dico comunque dopo averle analizzate ma non provate). Ti dirò di più: a livello di complessità la tua è anche più performante: presenta due sole SELECT e non tre (di cui due di quelle della soluzione presente nel libro sono anche annidate tra l'altro) e calcola una sola volta il voto medio (a differenza di quella nel libro che ne ha due). Pertanto: la differenza non la si vede finché si ha un numero esiguo di record nelle varie relazioni (diciamo un centinaio) ma inizia invece a farsi sentire quando la quantità degli stessi aumenta considerevolmente. Questo comunque dipende anche da quanti e quali attributi sono indicizzati ma questo è un discorso un po' troppo avanzato da affrontare qui e che comunque esula da ciò che richiede l'esercizio (magari potrà tornarti buono in futuro).
Spero di esserti stato d'aiuto.

Arconudo
Sisi, Cercavo un parere esterno. Grazie mille per la risposta

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