esercizi sull’algebra relazionale - università di...
TRANSCRIPT
Università degli Studi di Cagliari
Corso di Laurea in Ingegneria Elettronica
Basi di DatiA.A. 2009/2010
Docente: Prof. Ing. Giorgio Giacinto
Esercizi sull’algebrarelazionale
Ing. Roberto [email protected]
2Basi di Dati A.A. 2009/10
Esercizio 3.3 (1/5)
Considerate lo schema seguente:
Fornitori (fid: integer, fnome: string,
indirizzo: string)
Pezzi (pid: integer, pnome: string, colore: string)
Catalogo (fid: integer, pid: integer, costo: real)
La relazione Catalogo elenca i prezzi adottati da tutti i fornitori.
Scrivere le seguenti interrogazioni in algebra relazionale:
3Basi di Dati A.A. 2009/10
Esercizio 3.3 (2/5)
1. Trovare i nomi dei fornitori che forniscono i pezzi rossi
πfnome (πfid ((πpid σcolore =‘rosso’ Pezzi) Catalogo)
Fornitori)
3. Trovare i fid dei fornitori che forniscono pezzi rossi o che sono al 221 di Parcker Avenue
ρ (F1, πfid ((πpid σcolore =‘rosso’ Pezzi) Catalogo))
ρ (F2, πfid σindirizzo =‘221 Packer Avenue’ Fornitori)
F1 ∪ F2
4Basi di Dati A.A. 2009/10
Esercizio 3.3 (3/5)
5. Trovare i fid dei fornitori che forniscono tutti i pezzi
(πfid,pid Catalogo) / (πpid Pezzi)
7. Trovare i fid dei fornitori che forniscono tutti i pezzi
rossi o verdi
(πfid,pid Catalogo) / (πpid σcolore =‘rosso’ ∨ colore =‘verde’ Pezzi)
5Basi di Dati A.A. 2009/10
Esercizio 3.3 (4/5)
9. Trovare coppie di fid tali che il fornitore con il primo fid applica per alcuni (ne esiste almeno uno) pezzi che entrambi forniscono un prezzo maggiore di quello del fornitore col secondo fid.
πC1.fid,C2.fid (σC1.pid=C2.pid ∧ C1.fid≠C2.fid ∧ C1.costo>C2.costo
(C1 × C2))
ρ (C1, Catalogo)
ρ (C2, Catalogo)
6Basi di Dati A.A. 2009/10
Esercizio 3.3 (5/5)
11.Trovare i pid dei pezzi più costosi forniti dai fornitori chiamati Yosemite Sham.
ρ (R1 , πfid σfnome=‘Yosemite Sham’ Fornitori)
ρ (R2, R1 Catalogo)
ρ (R3, R2)
ρ (R4 (4→fid1, 5→pid1, 6→costo1), σR3.costo<R2.costo
(R3 × R2))
πpid (R2 – πfid, pid, costo R4)
7Basi di Dati A.A. 2009/10
Esercizio 3.3a) Trovare coppie di fid tali che il fornitore con il primo
fid applica per tutti i pezzi che entrambi forniscono un prezzo maggiore di quello del fornitore col secondo fid.
ρ(P1, πC1.fid,C2.fid (σC1.pid=C2.pid ∧ C1.fid≠C2.fid ∧
C1.costo>C2.costo (C1 × C2))
ρ (C1, Catalogo)
ρ (C2, Catalogo)
ρ(P2, πC1.fid,C2.fid (σC1.pid=C2.pid ∧ C1.fid≠C2.fid ∧
C1.costo<=C2.costo (C1 × C2))
P1 – P2
8Basi di Dati A.A. 2009/10
Esercizio 3.3
P1 contiene tutte le coppie tali che il fornitore con il primo fid applica per almeno un pezzo (che entrambi forniscono) un prezzo maggiore di quello del fornitore col secondo fid.
ρ(P1, πC1.fid,C2.fid (σC1.pid=C2.pid ∧ C1.fid≠C2.fid ∧
C1.costo>C2.costo (C1 × C2))
ρ(P2, πC1.fid,C2.fid (σC1.pid=C2.pid ∧ C1.fid≠C2.fid ∧
C1.costo<=C2.costo (C1 × C2))
P1 – P2
P2 contiene tutte le coppie tali che il fornitore con il primo fid nonapplica per almeno un pezzo (che entrambi forniscono) un prezzo maggiore di quello del fornitore col secondo fid.
P1-P2 contiene tutte le coppie tali che il fornitore con il primo fidapplica per tutti i pezzi (che entrambi forniscono) un prezzo maggiore di quello del fornitore col secondo fid.
9Basi di Dati A.A. 2009/10
Esercizio 3.4 (1/3)
Considerate lo schema seguente:
Fornitori (fid: integer, fnome: string,
indirizzo: string)
Pezzi (pid: integer, pnome: string, colore: string)
Catalogo (fid: integer, pid: integer, costo: real)
Dire cosa calcolano le seguenti interrogazioni in algebra relazionale.
10Basi di Dati A.A. 2009/10
Esercizio 3.4 (2/3)
1. πfnome ((πpid (σcolore =‘rosso’ Pezzi))
(σcosto<100 Catalogo) Fornitori)
R. Trova tutti i nomi dei fornitori che forniscono almeno un pezzo rosso che costa meno di 100€
3. (πfnome ((σcolore =‘rosso’ Pezzi) (σcosto<100 Catalogo)
Fornitori)) ∩ (πfnome ((σcolore =‘verde’ Pezzi)
(σcosto<100 Catalogo) Fornitori))
R. Trova tutti i nomi dei fornitori che forniscono almeno un pezzo rosso che costa meno di 100€ed un pezzo verde che costa meno di 100€
11Basi di Dati A.A. 2009/10
Esercizio 3.4 (3/3)
5. πfnome (πfid, fnome ((σcolore =‘rosso’ Pezzi)
(σcosto<100 Catalogo) Fornitori) ∩
πfid, fnome ((σcolore =‘verde’ Pezzi)
(σcosto<100 Catalogo) Fornitori))
R. Trova tutti i nomi dei fornitori che forniscono almeno un pezzo rosso che costa meno di 100€ed un pezzo verde che costa meno di 100€
12Basi di Dati A.A. 2009/10
Esercizio 3.5Considerate lo schema seguente:
Voli (vno: integer, da: string, a: string,
distanza: integer, partenza: time,
arrivo: time)
Aereo (aid: integer, anome: string,
autonomia: integer)
Certificato (pid: integer, aid: integer)
Personale (pid: integer, pnome: string,
salario: integer)
La relazione Personale descrive piloti così come gli altri tipi di impiegati; ogni pilota è certificato per certi aerei e solo i piloti sono certificati per volare. Scrivete le interrogazioni seguenti in algebra relazionale.
13Basi di Dati A.A. 2009/10
Esercizio 3.51. Trovare i pid dei piloti certificati per qualche aereo
Boeing.
πpid (σanome =‘Boeing’ (Aereo Certificato))
3. Trovare gli aid di tutti gli aerei che possono essere usati per voli non-stop da Bonn a Madrid.
ρ (BonnToMadrid, σda =‘Bonn’ ∧ a=‘Madrid’ (Voli))
πaid (σautonomia >= distanza (Aereo × BonnToMadrid))
14Basi di Dati A.A. 2009/10
Esercizio 3.5 (2/3)
2. Trovare i nomi dei piloti certificati per qualche aereo Boeing.
πpnome (σanome =‘Boeing’ Aereo Certificato
Personale)
4. Identificare i voli diretti che possono essere pilotati da piloti il cui stipendio sia superiore a 100000€.
πvno (σdistanza<=autonomia ∧ stipendio>100000 (Voli × (
Aereo Certificato Personale))
15Basi di Dati A.A. 2009/10
Esercizio 3.55. Trovare i nomi dei piloti che possono operare su aerei
con un autonomia superiore a 3000 miglia, ma che non sono certificati per alcun aereo Boeing
ρ (R1, πpid ( σautonomia > 3000 (Aereo Certificato))
πpnome (Personale (R1 - πpid (σanome=‘Boeing’
(Aereo Certificato))))
16Basi di Dati A.A. 2009/10
Esercizio 3.56. Trovare i pid del personale con il salario più alto
ρ (P1, Personale)
ρ (P2, Personale)
ρ (P3, πP2.pid (P1 P1.stipendio>P2.stipendio P2)
πpid P1 – P3
17Basi di Dati A.A. 2009/10
Esercizio 3.5a) Trovare i pid del personale con il salario più basso
ρ (P1, Personale)
ρ (P2, Personale)
ρ (P3, πP1.pid (P1 P1.stipendio>P2.stipendio P2)
πpid P1 – P3
NOTA: a differenza dell’esercizio precedente ora la proiezione del risultato del join condizionale è fatta su P1.pid .
18Basi di Dati A.A. 2009/10
Esercizio 3.57. Trovare i pid del personale con il secondo salario più
alto
ρ (P1, Personale)
ρ (P2, Personale)
ρ (P3, πP2.pid (P1 P1.stipendio>P2.stipendio P2)
ρ (P4, P2 P3)
ρ (P5, P2 P3)
ρ (P6, πP5.pid (P4 P4.stipendio>P5.stipendio P5)
P3 – P6
19Basi di Dati A.A. 2009/10
Esercizio 3.59. Trovare i pid del personale certificato esattamente per
tre aereiρ (C1, Certificato)
ρ (C2, Certificato)
ρ (C3, Certificato)
ρ (C4, Certificato)
ρ (P1,πpid (σ(C1.pid=C2.pid) ∧ (C2.pid=C3.pid) ∧ (C1.aid≠C2.aid) ∧
(C1.aid≠C3.aid) ∧ (C2.aid≠C3.aid) (C1 × C2 × C3))
ρ (P2,πpid (σ (C1.pid=C2.pid) ∧ (C2.pid=C3.pid) ∧ (C3.pid=C4.pid) ∧
(C1.aid≠C2.aid) ∧ (C1.aid≠C3.aid) ∧ (C1.aid≠C4.aid) ∧ (C2.aid≠C3.aid)
∧ (C2.aid≠C4.aid) ∧ (C3.aid≠C4.aid) (C1 × C2 × C3 × C4))
P1 – P2