Torna alla pagina di Basi di Dati
23 gennaio 2007
CAVALLO(Nome, Razza, DataNascita, Colore, NomeMadre, NomePadre)
FANTINO(CF, Nome, Cognome, DataNascita)
PARTECIPAZIONEGARA(NomeGara, NomeCavallo, CFFantino, PosizioneClassifica)
SELECT NomeGara
FROM Cavallo JOIN Partecipa ON Nome = NomeCavallo
WHERE Colore='Bianco' AND
PosizioneClassifica=1
SELECT DISTINCT CFFantino
FROM Partecipazione
WHEREPosizioneClassifica=1
GROUP BYCFFantino
HAVING COUNT(*) >= ALL
Proiietto tutte le coppie
TUTTI:=πNomeCavallo, CFFantino (PARTECIPAZIONE)
Ora seleziono i vincitori
V:=πNomeCavallo, CFFantino(σPosiozioneClassifica=1 PARTECIPAZIONE)
Ora tutti- quelli che hanno vinto
RIS:=TUTTI - V
proietto nome cavallo cF del fantino e nome gara delle gare vincenti
P1:=πNomeCavallo, CFFantino, NomeGara(σPosizioneClassifica=1PARTECIPAZIONE)
ne faccio una copia
P2:=ρNC, CFF,NG<- NomeCavallo, CFFantino, NomeGara(P1)
Join tra P1 e P2 per trovare il fantino e il cavallo che hanno vinto almeno 2 gare
R:=πCFF(P1 |X|NC=NomeCavallo ^ CFF=CFFantino ^ NG<>NomeGaraP2)
Join con fantino per ottenere il nome
RIS:=πNome(R |X| CF=CFFFANTINO)