Ciao a tutti,
sto seguendo un corso di Basi di Dati e... non ci capisco granché.
Mi sono stati dati questi 3 esercizi e io ci ho messo tutta la mia buona volontà, ma con scarsi risultati (Ho testato le soluzioni da me proposte su un server sql ed è da ieri che sbatto la testa contro errori che proprio non capisco!).
Potete controllare cosa c'è di sbagliato? Grazie mille :-)
Cominciamo con il primo
Sono date le relazioni seguenti (le chiavi primarie sono sottolineate):
PITTORE(CodP, NomeP, DataNascita, Nazione)
QUADRO(CodQ, Titolo, CodP)
ESPOSIZIONE(CodQ, DataInizio, DataFine, NomeGalleria)
Per ogni nazione, visualizzare il codice del pittore che ha dipinto il numero massimo di
quadri e il relativo numero di quadri dipinti.
La soluzione da me proposta è:
SELECT P.CodP, COUNT(Q.CodQ) AS NumQ, P.Nazione
FROM Pittore P, Quadro Q
WHERE P.CodP=Q.CodP
GROUP BY CodP, Nazione
HAVING MAX(NumQ)
Inutile dire che non funziona... eppure a me sembra tutto corretto :O
Idee?
Continuiamo col secondo esercizio
Sono date le relazioni seguenti (le chiavi primarie sono sottolineate):
MAESTRO-SCI(CodFiscale, DataNascita, Residenza, Nome, Cognome)
CORSO-SCI(CodC, Nome, Livello)
CLASSE(CodC, NumClasse, NumIscritti)
CALENDARIO-LEZIONI(CodC, NumClasse, Data, CodFiscale)
Per le classi che hanno un numero di iscritti superiore alla media del corso a cui fanno
riferimento, e che non sono mai state seguite da maestri nati prima del 1980, visualizzare il
codice del corso, il numero della classe, la data della prima e dell'ultima lezione effettuata.
Soluzione da me proposta:
SELECT DISTINCT CodC, NumClasse, MIN(Data), MAX(Data)
FROM CALENDARIO-LEZIONI
WHERE CodC IN (
SELECT CL.CodC
FROM CALENDARIO-LEZIONI CL, MAESTRO-SCI MS
WHERE CL.CodFiscale = MS.CodFiscale
AND MS.DataNascita > 1980
AND CL.CodC IN (
SELECT CodC
FROM CLASSE
GROUP BY CodC
HAVING NumIscritti > AVG(NumIscritti)
))
Se qualcuno mi spiega dove ho sbagliato, gli sarò grato per l'eternità.
Umberto