Torna alla pagina di Basi di Dati
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
RIS:=πCFComandante(TUTTI - NO)