Torna alla pagina di Basi di Dati
:: Basi di Dati: temi d'Esame
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<=10
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)