esercizi sull’algebra relazionale - università di...

19
Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Basi di Dati A.A. 2009/2010 Docente: Prof. Ing. Giorgio Giacinto Esercizi sull’algebra relazionale Ing. Roberto Tronci [email protected]

Upload: dinhnga

Post on 18-Feb-2019

222 views

Category:

Documents


0 download

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