2 Algebra Relazionale
Andrea Marrella
Laureati U Dirigenti
Matricola Cognome Et Lunione di due relazioni r1 e r2
7274 Rossi 37 indicata con r1 U r2 e contiene tutte le
tuple (prese una sola volta) presenti in
7432 Neri 39
r1, in r2 oppure in entrambe
9824 Verdi 38 Lo schema del risultato identico allo
9297 Neri 56 schema di r1
Laureati Dirigenti
Matricola Cognome Et Lintersezione di due relazioni r1 e r2
indicata con r1 r2 e contiene tutte le
7432 Neri 39 tuple (prese una sola volta) presenti
9824 Verdi 38 contemporaneamente sia in r1 che in r2
Lo schema del risultato identico allo
schema di r1
Padre Figlio
Francesco Maurizio
Paternit U Maternit ?? Francesco Carla
Giuseppe Maria
Lunione rispetta la propriet
di compatibilit rispetto Adriana Maurizio
allunione, ma il risultato Adriana Paolo
disomogeneo... Eleonora Maria
Paternit
Padre Figlio Genitore Figlio
Francesco Maurizio ((PadreGenitore), Paternit) Francesco Maurizio
Francesco Carla Francesco Carla
Giuseppe Maria Giuseppe Maria
Maternit
Madre Figlio Genitore Figlio
Adriana Maurizio Adriana Maurizio
((MadreGenitore), Maternit)
Adriana Paolo Adriana Paolo
Eleonora Maria Eleonora Maria
U
((Fabbrica Sede, Salario Retribuzione), Operai)
R S RxS
A B C X D E A B C D E
In questo caso
necessario sfruttare la
notazione posizionale...
nuovaRelazione
Impiegato CodImpiegato Capo CodReparto
Rossi A Mori A
Rossi A Bruni B
conflitto di
Neri B Mori A nomi risolto
Neri B Bruni B
Bianchi B Mori A
Bianchi B Bruni B
Semantica :
la relazione risultato ha gli stessi attributi delloperando e contiene le tuple
delloperando che soddisfano la condizione specificata
Impiegati
Impiegato Codice Impiegato Codice
Esempio
Rossi A Rossi A
Tutti gli Impiegati con codice = A
Neri B
Codice=A (Impiegati) Bianchi B
14 Esercitazioni di Basi di Dati A.A.10\11 2 Algebra Relazionale
Selezione 2\2
Laureati
Esempio Matricola Cognome Uni Et
Tutti i Laureati con Cognome = Rossi versit
ed Et>37
7274 Rossi Roma 37
Cognome=Rossi Et>37(Laureati)
7432
9824
Rossi
Roma
Roma
Roma
39
38
Cognome=Universit(Laureati)
Matricola
9824
Cognome
Roma
Universit
Roma
Et
38
Sintassi : lista_di_Attributi( R)
Semantica :
la relazione risultato ha i soli attributi contenuti in ListaAttributi e contiene le
tuple ristrette agli attributi nella lista (senza duplicati)
Esempio Laureati
Cognome e Universit Matricola Cognome Universit Et
di tutti i laureati 7274 Rossi Roma 37
ATTENZIONE : 7432 Rossi Roma 39
gli attributi non
9824 Roma Roma 38
contenuti nella lista
vengono proiettati fuori
Cognome,Universit(Laureati) Cognome
Rossi
Universit
Roma
16 Esercitazioni di Basi di Dati A.A.10\11 2 Algebra Relazionale
Roma Roma
Selezione e Proiezione
Gli operatori di selezione e proiezione si possono
combinare efficientemente
Esempio
Cognome e Universit dei laureati con pi di 37 anni
Laureati
Matricola Cognome Uni Et
versit
7274 Rossi Roma 37 Cognome Universit
7432 Rossi Roma 39 Rossi Roma
9824 Roma Roma 38 Roma Roma
Cognome,Universit (Et>37(Laureati) )
17 Esercitazioni di Basi di Dati A.A.10\11 2 Algebra Relazionale
Join condizionale
JOIN = Operatore molto usato per combinare
informazioni tra due o pi relazioni Un JOIN condizionale tra R1
e R2 fondamentalmente una
JOIN condizionale: SELECT applicata sul
Sintassi e semantica: prodotto cartesiano tra R1 e
R2
c R2 equivale a c (R1xR2)
R1
La condizione di JOIN identica (nella forma) alla condizione di
selezione
R1 R2
R1 R2 R1.Stipendio>20
R1.Stipendio=R2.Stipendio
Impiegato Stipendio Capo Stipendio
Impiegato Stipendio Capo
Rossi 20 Mori 10
Neri 20 Bruni 20 Rossi 20 Bruni
Bianchi
19 30 Neri 20 Bruni
Impiegato Reparto Capo Reparto Impiegato Reparto Capo
Rossi A Mori A Rossi A Mori
Neri B Bruni B Neri B Bruni
Bianchi B
Bianchi B bruni
Impiegato Reparto Capo Reparto Impiegato Reparto Capo
Rossi A Mori B Neri B Mori
Neri B Bruni C Bianchi B Mori
Bianchi B
Impiegato Reparto Capo Reparto
Impiegato Reparto Capo
Rossi A Mori D
Neri B Bruni C
Bianchi B
Stipendio(R ((R1(1Imp,2Stip), R) ))
R.Stipendio>R1.Stip
In questo modo vengono mantenute tutte le
R tuple tranne quella in cui l attributo
Impiegato Stipendio Stipendio assume il valore minore. Quindi
per il principio di complementariet
Rossi 10 sottraendo dall insieme iniziale l insieme
Stipendio
Neri 20 delle tuple dove Stipendio non il minimo,
10 otteniamo proprio il valore minimo che
Bianchi 30 cercavamo.
Studente,Voto(R
R1 R2
Impiegato Reparto Reparto
R1 / R2
Rossi A A Impiegato
Rossi B B Rossi
Bianchi B
25 Esercitazioni di Basi di Dati A.A.10\11 2 Algebra Relazionale
Condizioni di selezione e valori NULL
Impiegati
Matricola Cognome Universit Et Eta>40(Impiegati) ???
7274 Rossi Roma 37
7432 Rossi Roma 41
La condizione vera solo per
9824 Roma Roma NULL valori NON NULLI
4076 Mori 45 50
8123 Lupi 46 60
Matricola Nome Et Stipendio
7309 Rossi 34 45
5698 Bruni 43 42
4076 Mori 45 50
8123 Lupi 46 60
Matricola,Nome,Et (Stipendio>40(Impiegati) )
29 Esercitazioni di Basi di Dati A.A.10\11 2 Algebra Relazionale
Esempio 3 1\4
Impiegati Supervisione
Matricola Nome Et Stipendio Impiegato Capo
7309 Rossi 34 45 7309 5698
5998 Bianchi 37 38 5998 5698
9553 Neri 42 35 9553 4076
5698 Bruni 43 42 5698 4076
4076 Mori 45 50 4076 8123
8123 Lupi 46 60
Una buona tecnica per ricavare le
Trovare le Matricole dei capi degli espressioni dellalgebra relazionale
impiegati che guadagnano pi di 40 quella di procedere per passi,
milioni ricordando che i risultati di
interrogazioni intermedie sono
sempre relazioni
30 Esercitazioni di Basi di Dati A.A.10\11 2 Algebra Relazionale
Esempio 3 2\4
Impiegati
PASSO 1 : si cercano tutti gli
Matricola Nome Et Stipendio impiegati che guadagnano pi di 40
7309 Rossi 34 45 milioni
5998 Bianchi 37 38
9553
5698
Neri
Bruni
42
43
35
42 Stipendio>40(Impiegati)
4076 Mori 45 50
8123 Lupi 46 60
Matricola Nome Et Stipendio
7309 Rossi 34 45
5698 Bruni 43 42
4076 Mori 45 50
8123 Lupi 46 60
31 Esercitazioni di Basi di Dati A.A.10\11 2 Algebra Relazionale
Esempio 3 3\4
(Impiegati)
Stipendio>40
PASSO 2 : si associano tutti gli
Matricola Nome Et Stipendio
impiegati che guadagnano pi di 40
7309 Rossi 34 45 milioni ai loro capi, sfruttando un
5698 Bruni 43 42 equi-join con
4076 Mori 45 50 Supervisione.Impiegato=Matricola
8123 Lupi 46 60
Supervisione Supervisione
Stipendio>40(Impiegati)
Impiegato=Matricola
Impiegato Capo
7309 5698
5998 5698 Nome Et Stipendio Impiegato Capo
Impiegato=Matricola 8123
Stipendio>40(Impiegati) )
33 Esercitazioni di Basi di Dati A.A.10\11 2 Algebra Relazionale
Esempio 4
Impiegati Supervisione
Matricola Nome Et Stipendio Impiegato Capo
Matricola=Capo
Nome Stipendio
capo (Supervisione Impiegato=Matricola Bruni 42
(Supervisione) -
capo
(Supervisione Capo
capo Impiegato=Matricola
8123
( Stipendio<=40 (Impiegati) ))
dell'impiegato e del capo
Stipendio>StipC (
( (Matricola MatrC, Nome NomeC , Stipendio StipC , Et EtC), Impiegati)
MatrC=Capo
(Supervisione Impiegato=Matricola
Impiegati )))
MatrC NomeC StipC Matricola Nome Stipendio
fnome (
fid((pid (colore=rosso (Pezzi)))
Catalogo)
2. Trovare i fid dei fornitori che forniscono pezzi rossi o pezzi verdi
Catalogo)
3. Trovare i fid dei fornitori che forniscono pezzi rossi o si trovano a via
Cavour
(R2, fid(indirizzo=Via Cavour (Fornitori))) Si sfrutta loperatore di
ridenominazione per creare le due
nuove relazioni R1 e R2, sulle quali
R1 R2 si pu successivamente calcolare
lunione
40 Esercitazioni di Basi di Dati A.A.10\11 2 Algebra Relazionale
Soluzione Esercizio 1 - 4\12
Si consideri il database che contiene le seguenti relazioni:
FORNITORI (fid : integer, fnome : String, indirizzo : String)
PEZZI(pid : integer , pnome : String, colore : String)
CATALOGO (fid : integer, pid : integer, costo : real)
4. Trovare i fid dei fornitori che forniscono pezzi rossi e pezzi verdi
(R2, fid(pid(colore=verde (Pezzi)) Catalogo))
R1 R2
7. Trovare i fid dei fornitori che forniscono tutti i pezzi rossi o verdi
8. Trovare i fid dei fornitori che forniscono tutti i pezzi rossi oppure tutti i
pezzi verdi
9. Trovare coppie di fid tali che il fornitore con il primo fid applica per
alcuni pezzi un prezzo maggiore di quello del fornitore con il secondo fid
(R1, Catalogo)
(R2, Catalogo)
R1.fid, R2.fid( R1.pid = R2.pid R1.fid R2.fid R1.costo > R2.costo (R1xR2))
10. Trovare i pid dei pezzi forniti da almeno due diversi fornitori
(R1, Catalogo)
(R2, Catalogo)
11. Trovare i pid dei pezzi pi costosi forniti dai fornitori chiamati
Sapienza
(R3, R2)
(R4(1 fid, 2 pid, 3 costo), (R3.costo > R2.costo (R3xR2))
pid (R2 fid, pid, costo (R4))
48 Esercitazioni di Basi di Dati A.A.10\11 2 Algebra Relazionale
Soluzione Esercizio 1 - 12\12
Si consideri il database che contiene le seguenti relazioni:
FORNITORI (fid : integer, fnome : String, indirizzo : String)
PEZZI(pid : integer , pnome : String, colore : String)
CATALOGO (fid : integer, pid : integer, costo : real)
12. Trovare i pid dei pezzi forniti da tutti i fornitori a meno di 200 (se
qualche fornitore non ne fornisce, o chiede pi di 200 , il pezzo non
viene selezionato)
(Commissioni Numero=Comm (((CommissioneComm),Deputati Provincia=Sigla
(Province Regione=Codice
Nome=Sicilia (Regioni)))))))
51 Esercitazioni di Basi di Dati A.A.10\11 2 Algebra Relazionale
Soluzione Esercizio 2 - 2\6
Si consideri il database che contiene le seguenti relazioni:
DEPUTATI (Codice, Cognome, Nome, Commissione, Provincia,Collegio)
COLLEGI (Provincia , Numero, Nome)
PROVINCE (Sigla, Nome, Regione)
REGIONI (Codice, Nome)
COMMISSIONI (Numero, Nome, Presidente)
Commissione=Numero
(nome=Bilancio (Commissioni)))
Sigla=Provincia
(((NomenomeC),Deputati) Commissione=Numero
(nome=Bilancio (Commissioni)))
53 Esercitazioni di Basi di Dati A.A.10\11 2 Algebra Relazionale
Soluzione Esercizio 2 - 4\6
Si consideri il database che contiene le seguenti relazioni:
DEPUTATI (Codice, Cognome, Nome, Commissione, Provincia,Collegio)
COLLEGI (Provincia , Numero, Nome)
PROVINCE (Sigla, Nome, Regione)
REGIONI (Codice, Nome)
COMMISSIONI (Numero, Nome, Presidente)
Codice=Regione
((Nomenom1),Province)
Sigla=Provincia
(((NomenomeC),Deputati)
Commissione=Numero
(nome=Bilancio (Commissioni)))
54 Esercitazioni di Basi di Dati A.A.10\11 2 Algebra Relazionale
Soluzione Esercizio 2 - 5\6
5. Trovare le regioni in cui vi sia un solo collegio, indicando nome e
cognome del deputato ivi eletto
(R1,
(Regione, CodiceCollegio(
((NomeNomeColl, Numero CodiceCollegio),Collegi)
Provincia=Sigla
((NomeNomeReg),Regioni))))
(Province Regione=Codice
Per aumentare la
R1 leggibilit, si rinomina
con R1 il risultato
Regione CodiceCollegio
dellinterrogazione
(R5, (Nome,Cognome,Regione,Collegio(
R4 )))
Deputati Collegio=CodiceCollegio
R5
Nome Cognome Regione Collegio
Deputati Collegio=CodiceCollegio
ProvColl=Sigla
((NomeNomeProv),Province
Regione=Codice
((NomeNomeReg),Regioni)))))
R1 la relazione che
descrive la lista completa
delle Regioni, dei Collegi
associati e dei Deputati
eletti
2)
(R2(Regione Regione2, NomeReg NomeReg2, Collegio Collegio2, NomeColl NomeColl2,
Nome Nome2, CognomeCognome2 ), R1)
Si costruisce una nuova
relazione R2 identica ad
3) R1, ridenominando gli
attributi
(R3, NomeReg, NomeColl, Nome, Cognome (
R1 R2))