Algebra relazionale (II)
Join esterni
Per combinare sempre le tuple di due
relazioni, anche quando non ci sono
corrispondenze tra i valori degli attributi
comuni, inserendo valori NULL in
assenza di controparti
Non tralasciano tuple di operandi nel
risultato
Join esterni
Join esterno sinistro: estende solo le tuple del
primo operando

Aggiunge tuple di r1 senza corrispettivo in r2
Join esterno destro:estende solo le tuple del
secondo operando

Aggiunge tuple di r2
Join esterno completo: estende tuple di
entrambi gli operandi

Bilaterale
Join esterni
Rel1
Rel2
Impiegato Reparto
Reparto
Rossi
Vendite
Produzione Mori
Neri
Produzione
Acquisti
Bianchi
Produzione
Rel1
LEFT Rel2
Capo
Bruni
Impiegato Reparto
Capo
Rossi
Vendite
NULL
Neri
Produzione
Mori
Bianchi
Produzione
Mori
Join esterni
Rel1
Rel2
Impiegato Reparto
Reparto
Rossi
Vendite
Produzione Mori
Neri
Produzione
Acquisti
Bianchi
Produzione
Rel1
RIGHT Rel2
Capo
Bruni
Impiegato Reparto
Capo
Neri
Produzione
Mori
Bianchi
Produzione
Mori
NULL
Acquisti
Bruni
Join esterni
Rel1
Rel2
Impiegato Reparto
Reparto
Rossi
Vendite
Produzione Mori
Neri
Produzione
Acquisti
Bianchi
Produzione
Rel1
FULL Rel2
Capo
Bruni
Impiegato Reparto
Capo
Rossi
Vendite
NULL
Neri
Produzione
Mori
Bianchi
Produzione
Mori
NULL
Acquisti
Baldi
Theta-Join
Serve per fare Join su relazioni senza
attributi omonimi
Operatore derivato: si ottiene come
prodotto cartesiano seguito da selezione
di tuple che verificano condizione di
uguaglianza tra valori di attributi
r1 F r2 = F(r1  r2)
Theta-Join
Rel1
Rel2
Impiegato Reparto
Divisione
Capo
Rossi
Vendite
Vendite
Bruni
Neri
Produzione
Produzione Mori
Bianchi
Produzione
Acquisti
Baldi
Reparto=Divisione(Rel1  Rel2)
Impiegato Reparto
Divisione
Capo
Rossi
Vendite
Vendite
Bruni
Neri
Produzione
Produzione
Mori
Bianchi
Produzione
Produzione
Mori
Theta-Join ed Equi-Join
Theta-Join: r1 F r2 = F(r1  r2)
Condizione di selezione F è formula
proposizionale come descritto per
operatore di selezione
Se F è congiunzione di uguaglianze tra
attributi di r1 e attributi di r2: theta-join
detto equi-join
Theta-Join ed Equi-Join
Per esempio:

Rel1(Impiegato,Reparto),
Rel2(Divisione,Capo)
Reparto=Divisione(Rel1  Rel2)

Infrazioni(Codice,Data,Ag,Art,Prov,Num),
Auto(Provincia,Targa,Prop,Indirizzo)
Prov=Provincia  Num=Targa(Infrazioni Auto)
Theta-Join ed Equi-Join
Theta-join e equi-join più utili di join
naturale


Permettono di operare su relazioni senza
attributi in comune
Join naturale simulabile mediante
ridenominazione, equi-join e proiezione
Theta-Join ed Equi-Join
Per esempio: R1(A,B,C), R2(B,C,D)
R1R2 =
A,B,C,D(R1B=B’C=C’(B’,C’B,C(R2)))
Theta-Join ed Equi-Join
Per esempio: R1(A,B,C), R2(B,C,D)
R1R2 =
A,B,C,D(R1B=B’C=C’(B’,C’B,C(R2)))
Join naturale
Equi-join
Theta-Join ed Equi-Join
Per esempio: R1(A,B,C), R2(B,C,D)
R1R2 =
A,B,C,D(R1B=B’C=C’(B’,C’B,C(R2)))
Si ridenomina R2 affinchè abbia attributi diversi da
quelli di R1
Equi-join tra R1 e R2 per selezionare tuple in
corrispondenza
Proiezione del risultato per eliminare attributi
ridondanti
Esercitazione
Che cos’è StudentiLavoratori?
Studenti
Matricola
Cognome
Nome
123456
Bruni
Andrea
654321
Neri
Dario
456123
Reale
Carla
Cognome
Nome
321654
Bianco
Giovanni
654321
Neri
Dario
456123
Reale
Carla
Lavoratori Matricola
Esercitazione
Che cos’è StudentiLavoratori?
Studenti
Matricola
Cognome
Nome
123456
Bruni
Andrea
654321
Neri
Dario
456123
Reale
Carla
Cognome
Nome
321654
Bianco
Giovanni
654321
Neri
Dario
456123
Reale
Carla
Lavoratori Matricola
Esercitazione
Che cos’è Studenti - Lavoratori?
Studenti
Matricola
Cognome
Nome
123456
Bruni
Andrea
654321
Neri
Dario
456123
Reale
Carla
Cognome
Nome
321654
Bianco
Giovanni
654321
Neri
Dario
456123
Reale
Carla
Lavoratori Matricola
Esercitazione
Che cos’è NumeroMatricola(Studenti)?
Studenti
Matricola
Cognome
Nome
123456
Bruni
Andrea
654321
Neri
Dario
456123
Reale
Carla
Esercitazione
Che cos’è Voto>25(Studenti)?
Studenti
Cognome Nome
Età Voto
Bruni
Dario
21
29
Neri
Dario
23
29
Reale
Carla
20
22
Esercitazione
Che cos’è Voto>25  Eta<23(Studenti)?
Studenti
Cognome Nome
Età Voto
Bruni
Dario
21
29
Neri
Dario
23
29
Reale
Carla
20
22
Esercitazione
Che cos’è Voto>25  Eta<23(Studenti)?
Studenti
Cognome Nome
Età Voto
Bruni
Dario
21
29
Neri
Dario
23
29
Reale
Carla
20
22
Esercitazione
Che cos’è Cognome,Nome(Studenti)?
Studenti
Cognome Nome
Età Voto
Bruni
Dario
21
29
Neri
Dario
23
29
Reale
Carla
20
22
Esercitazione
Che cos’è Nome,Voto(Studenti)?
Studenti
Cognome Nome
Età Voto
Bruni
Dario
21
29
Neri
Dario
23
29
Reale
Carla
20
22
Esercitazione
Che cos’è Cognome,Nome,Età,Voto(Studenti)?
Studenti
Cognome Nome
Età Voto
Bruni
Dario
21
29
Neri
Dario
23
29
Reale
Carla
20
22
Esercitazione
Che cos’è Studenti  Esami (join
naturale)?
Studenti
Esami
Matricola Cognome Nome
123456
Bruni
Dario
654321
Neri
Dario
456123
Reale
Carla
Matricola Corso
Voto
123456
Psicologia
23
123456
Informatica 29
654321
Psicologia
29
456123
Psicologia
22
Esercitazione
Che cos’è Studenti  Esami (join
naturale)?
Studenti
Esami
Matricola Cognome Nome
123456
Bruni
Dario
654321
Neri
Dario
456123
Reale
Carla
Numero
Corso
Voto
123456
Psicologia
23
123456
Informatica 29
654321
Psicologia
29
456123
Psicologia
22
Esercitazione
Che cos’è Studenti  Esami (join
naturale)?
Studenti
Esami
Matricola Cognome Nome
123456
Bruni
Dario
654321
Neri
Dario
456123
Reale
Carla
Matricola Corso
Voto
654123
Psicologia
23
789456
Informatica 29
901234
Psicologia
29
876987
Psicologia
22
Esercitazione
Che cos’è Studenti  Lavoratori (join
naturale)?
Studenti
Matricola
Cognome
Nome
123456
Bruni
Andrea
654321
Neri
Dario
456123
Reale
Carla
Cognome
Nome
321654
Bianco
Giovanni
654321
Neri
Dario
456123
Reale
Carla
Lavoratori Matricola
Esercitazione
Studenti  Esami è un join completo?
Studenti
Esami
Matricola Cognome Nome
123456
Bruni
Dario
654321
Neri
Dario
456123
Reale
Carla
Matricola Corso
Voto
123456
Psicologia
23
123456
Informatica 29
654321
Psicologia
29
456123
Psicologia
22
Esercitazione
Che cos’è Studenti LEFT Esami?
Studenti
Esami
Matricola Cognome Nome
123456
Bruni
Dario
654321
Neri
Dario
456123
Reale
Carla
Matricola Corso
Voto
987654
Psicologia
23
987654
Informatica 29
654321
Psicologia
29
456123
Psicologia
22
Esercitazione
Che cos’è Studenti FULL Esami?
Studenti
Esami
Matricola Cognome Nome
123456
Bruni
Dario
654321
Neri
Dario
456123
Reale
Carla
Matricola Corso
Voto
987654
Psicologia
23
987654
Informatica 29
654321
Psicologia
29
456123
Psicologia
22
Interrogazioni con Algebra
Relazionale
Dato schema R(Y) di DB, un’interrogazione è una
funzione che, per ogni istanza r di R(Y), produce una
relazione su un dato insieme di attributi X
Le espressioni di un linguaggio di interrogazione (per
esempio, algebra relazionale), permettono di
realizzare interrogazioni a un DB
E(r): risultato dell’applicazione dell’espressione E al
DB r
E(r) è una relazione
Esempi di Interrogazioni: 1
Impiegati
Supervisione
Matr Nome
Età Stip
Capo Impiegato
101
Mario Rossi
34
2.000
210
101
103
Mario
Bianchi
23
1.750
210
103
104
Luigi Neri
38
3.050
210
104
105
Nico Bini
44
1.700
231
105
210
Marco Celli
49
3.000
301
210
231
Siro Bisi
50
3.000
301
231
252
Nico Bini
44
3.500
375
252
301
Sergio Rossi
34
3.500
375
Mario Rossi
50
3.250
Esempi di Interrogazioni: 1
Trovare matricola, nome ed età degli
impiegati che guadagnano più di 2.000
Matr,Nome,Età(Stip>2.000(Impiegati))
Esempi di Interrogazioni: 2
Trovare gli impiegati che guadagnano più
del loro capo, mostrando matricola, nome e
stipendio di ciascuno di essi e del capo
1. Definire relazione R che lega (join)
descrizione di impiegati a descrizione di
capo
Per non confondere gli attributi dell’impiegato e
del capo bisogna ridenominare una delle due
relazioni
Esempi di Interrogazioni: 2
Trovare gli impiegati che guadagnano più
del loro capo, mostrando matricola, nome e
stipendio di ciascuno di essi e del capo
2. Selezionare le tuple di R tali nelle quali lo
stipendio dell’impiegato è superiore a quello
del capo
Esempi di Interrogazioni: 2
Trovare gli impiegati che guadagnano più
del loro capo, mostrando matricola, nome e
stipendio di ciascuno di essi e del capo
3. Proiettare risultato su attributo Matr, Nome
e Stip di impiegato e sui corrispettivi
(ridenominati) di capo
Esempi di Interrogazioni: 2
1. Definire relazione R che lega descrizione di
impiegati a descrizione di capo
a) Definire relazione R1 che descrive gli
impiegati di ciascun capo

Schema:
R1(Matr,Nome,Età,Stip,Capo,Impiegato)
R1 = Impiegati Matr=Impiegato Supervisione
Esempi di Interrogazioni: 2
1.
b) Definire relazione R che descrive impiegati e
capo: per non confondere gli attributi
dell’impiegato e del capo ridenominare
impiegati
R2=MatrC,NomeC,EtàC,StipCMatr,Nome,Età,Stip(Impiegati)
R = R1 Capo=MatrC R2
Esempi di Interrogazioni: 2
1.
b) Definire relazione R che descrive impiegati e
capo:
per non
confondereSupervisione)
gli attributi
(Impiegati
Matr=Impiegato
dell’impiegato 
e del capo ridenominare
Capo=MatrC
impiegati
MatrC,NomeC,EtàC,StipCMatr,Nome,Età,Stip(Impiegati)
R2=MatrC,NomeC,EtàC,StipCMatr,Nome,Età,Stip(Impiegati)
R = R1 Capo=MatrC R2
Esempi di Interrogazioni: 2
2. Selezionare tuple in R in cui lo stipendio
dell’impiegato è superiore a quello del capo:
Stip>StipC(R)
Esempi di Interrogazioni: 2
2. Selezionare tuple in R in cui lo stipendio
dell’impiegato è superiore a quello del capo:
Stip>StipC(R)
Stip>StipC((Impiegati Matr=ImpiegatoSupervisione)
Capo=MatrC
MatrC,NomeC,EtàC,StipCMatr,Nome,Età,Stip(Impiegati))
Esempi di Interrogazioni: 2
3. Proiettare R su attributi richiesti:
Matr,Nome,Stip,MatrC,NomeC,StipC(Stip>StipC(R))
Esempi di Interrogazioni: 2
3. Proiettare R su attributi richiesti:
Matr,Nome,Stip,MatrC,NomeC,StipC(Stip>StipC(R))
Matr,Nome,Stip,MatrC,NomeC,StipC(
Stip>StipC((Impiegati Matr=ImpiegatoSupervisione)
Capo=MatrC
MatrC,NomeC,EtàC,StipCMatr,Nome,Età,Stip(Impiegati)))
Esempi di Interrogazioni: 2
Trovare gli impiegati che guadagnano più
del loro capo, mostrando matricola, nome e
stipendio di ciascuno di essi e del capo
Matr,Nome,Stip,MatrC,NomeC,StipC(
Stip>StipC((Impiegati Matr=ImpiegatoSupervisione)
Capo=MatrC
MatrC,NomeC,EtàC,StipCMatr,Nome,Età,Stip(Impiegati)))
Esempi di Interrogazioni: 3
Trovare matricola e nome dei capi i cui
impiegati guadagnano tutti più di 2.000
1. Tutti gli impiegati? Selezionare capi che
hanno impiegati con stipendio < 2.000
Capo(Supervisione Matr=Impiegato(Stip<2.000(Impiegati)))
Esempi di Interrogazioni: 3
2. Sottrarre tali capi all’insieme di tutti i capi
Capo(Supervisione) –
Capo(Supervisione Matr=Impiegato(Stip<2.000(Impiegati)))
Esempi di Interrogazioni: 3
Trovare matricola e nome dei capi i cui
impiegati guadagnano tutti più di 2.000
Matr,Nome(Impiegati Matr=Impiegato
(Capo(Supervisione) –
Capo(Supervisione Matr=Impiegato(Stip<2.000(Impiegati)))))
Algebra con valori nulli
Come applicare espressioni di algebra
relazionale in presenza di tuple con valori
nulli?
Per esempio: Età>30(Impiegati)

Se in relazione Impiegati non si conosce età di alcune
persone: tuple 104 e 219 devono essere selezionate?
Matr Nome
Età
Stip
101
Mario Rossi
34
2.000
103
Mario
Bianchi
23
1.750
104
Luigi Neri
NULL 3.050
105
Nico Bini
44
210
Marco Celli
NULL 3.000
1.700
Algebra con valori nulli
Logica a 3 valori per il trattamento di valori veri,
falsi, sconosciuti: T, F, U (unknown)
Un predicato assume volore U quando uno dei
termini del confronto ha valore nullo
Tabelle di verità dei connettivi: AND, OR, NOT
AND T U F
OR T U F
NOT
T
T U F
T
T T T
T
F
U
U U F
U
T U U
U
U
F
F F F
F
T U F
F
T
Algebra con valori nulli
Poiché ragionare su valori nulli è complesso,
adottiamo approccio semplificato al
trattamento del valore nullo nelle espressioni
dell’algebra relazionale
Definiamo due nuove condizioni atomiche di
selezione: dato attributo A


A IS NULL: vera su tupla t se il valore di t su A è
nullo; falsa se valore specificato
A IS NOT NULL: vera su t se valore di t su A
specificato, falsa altrimenti
Algebra con valori nulli
Interpretiamo le condizioni di selezione in
modo restrittivo, escludendo da selezione le
tuple con valore U, a meno che non sia
espicitamente incluso nella selezione
Algebra con valori nulli
Per esempio:


Età>30(Impiegati) – le tuple con Età null
non vengono selezionate (su di esse la
condizione Età>30 assume valore U)
Età>30  Età IS NULL(Impiegati) – si includono
anche le tuple con Età sconosciuta (104,
210 in relazione Impiegati)
Viste
Relazioni derivate definite su relazioni di
schema logico


Viste materializzate (con tuple memorizzate
in DB)
Relazioni virtuali, o viste (memorizzate in
DB mediante espressioni del linguaggio di
interrogazione, senza memorizzazione di
tuple)
Viste
DBMS offrono solo relazioni virtuali (no
ridondanza dati)
Interrogazioni che utilizzano viste sono
risolte sostituendo la definizione delle
viste alle loro occorrenze
Viste
Per esempio:



R1(A,B,C), R2(C,D,E), R3(E,G)
Vista: R = A>D(R1  R2)
Interrogazione: B=G(R  R3) risolta così:
B=G(A>D(R1  R2)  R3)
Viste
Viste utile per:


Permettere ad applicazioni di utilizzare
relazioni che contengono solo le
informazioni di interesse
Se schema di DB viene ristrutturato,
ricreare relazioni eliminate per evitare di
modificare le applicazioni che le usavano
 Per esempio: R(A,B,C) sostituita in DB da
R1(A,B), R2(B,C), e definiamo vista R= R1R2
Scarica

parte teorica (formato ppt) - Dipartimento di Informatica