Torna alla pagina di Basi di Dati
:: Basi di Dati: temi d'Esame
16 febbraio 2007
NAVE(Nome,IDArmatore, Lunghezza, NumPasseggeri, NumPiani, NumCFComandante)
ARMATORE(ID, Nome, Cognome)
COMANDANTE(CF, Nome, Cognome, DataNascita)
SELECT COUNT(DISTINCT Nome)
FROM Nave JOIN Comandante ON CFComandante=CF
WHERE DataNascita<= 20/08/1968 AND
SELECT A.ID, A.Nome, A.Cognome
FROM Armatore AS A JOIN Nave AS N ON CF=CFComandante
GROUP BY A.ID
HAVING COUNT(N.Nome) >= ALL
Proietto tutte le coppie POSSIBILI
TUTTI:=πID,CF(ARMATORE X COMANDANTE)
Li rinomino
T:=ρIDArmatore, CFComandante <- ID,CF (TUTTI)
Ora proietto solo le reali coppie
R:=πIDArmatore, CFComandante(NAVE)
Tutti i possibili - i reali = quelli mai incontrati
RIS:= T - R
Proietto i comandanti e le loro navi
T:=πCFComandante, Nome(NAVE)
Ne faccio una copia
T2:=ρCFC,N <- CFComandante, Nome(T)
Trovo coloro che hanno comandato almeno 2 navi
NO:=πCFComandante, Nome(T |X|CFC=CFComandante ^ Nome <>N T2)
Tutti - quelli che hanno comandato almeno 2 navi (non č T-NO????)
RIS:=πCFComandante(TUTTI - NO)