• Non ci sono risultati.

1 Join Join Join Join (naturale)

N/A
N/A
Protected

Academic year: 2023

Condividi "1 Join Join Join Join (naturale)"

Copied!
6
0
0

Testo completo

(1)

Combinando selezione e proiezione, si possono estrarre informazioni da una sola relazione. Non si possono però correlare informazioni presenti in relazioni diverse

Il join è l'operatore più interessante (potente) dell'algebra relazionale in quanto permette di correlare dati presenti in relazioni diverse

Join

E’ l’operatore più caratteristico dell’algebra relazionale, che evidenzia la proprietà del modello relazionale di essere basato su valori. Non ha un corrispettivo nella teoria degli insiemi.

L’operatore di join (naturale) correla dati contenuti in relazioni diverse.

Il suo risultato è una relazione definita sull’unione degli schemi degli operandi, le cui tuple sono ottenute combinando le tuple degli operandi che hanno valori uguali su attributi comuni (con lo stesso nome).

Join (naturale)

Il join naturale r1  r2 di r1(X1) e r2(X2) è una relazione definita su X1X2 (che si può scrivere X1X2)

r1  r2 = { t su X1X2 | t[X1]  r1 e t[X2]  r2 } Il grado della relazione ottenuta è minore o uguale alla somma dei gradi delle due relazioni in quanto gli attributi omonimi compaiono una sola volta.

Per questo motivo la definizione implica che una tupla del risultato sia ottenuta concatenando ogni tupla della prima relazione con ogni tupla della seconda in cui gli attributi comuni hanno lo stesso valore.

Join

Se X1 X2 è vuoto il join naturale equivale al prodotto cartesiano fra le relazioni.

Non ci sono attributi comuni e ogni tupla della prima relazione può concatenarsi con ogni tupla della seconda

Se X1 = X2 il join naturale equivale all’intersezione fra le relazioni.

Infatti, ogni tupla può concatenarsi solo con se stessa e quindi, se è presente nel risultato finale (cioè se è presente in entrambe le relazioni), resta immutata.

Join

(2)

Se ciascuna tupla di ciascun operando contribuisce ad almeno una tupla del risultato il join si dice completo.

Se per alcune tuple non è verificata la corrispondenza e non contribuiscono al risultato, le tuple si dicono dangling.

Join

Due casi limite:

join vuoto, nessuna tupla degli operandi è combinabile

•ciascuna delle tuple di un operando è combinabile con tutte le tuple dell’altro. In questo caso il risultato è pari al prodotto cartesiano degli operandi.

Il secondo caso richiede:

•che esistano attributi comuni che assumono lo stesso valore per ogni tupla di entrambi gli operandi (che, quindi, non contengono informazione significativa)

oppure

•che non vi siano attributi comuni.

Join

A Mori

B Bruni

Reparto Capo Rossi A

Neri B

Bianchi B Impiegato Reparto

Rossi A Mori

Neri B Bruni

Impiegato Reparto Capo

Bianchi B Bruni Rossi A

Neri B

Bianchi B Rossi A

Neri B

Bianchi B

A Mori

B Bruni

A Mori

B Bruni

B Bruni

B Bruni

• ogni tupla contribuisce al risultato: il join è completo

Neri B Mori

Impiegato Reparto Capo Bianchi B Mori Impiegato Reparto

Rossi A

Neri B

Bianchi B

Reparto Capo

B Mori

C Bruni

A

C

Un Join non completo

(3)

Impiegato Reparto Rossi A

Neri B

Bianchi B

Reparto Capo

D Mori

C Bruni

Impiegato Reparto Capo

Un Join vuoto

•r1  r2 contiene un numero di tuple compreso fra zero (risultato = insieme vuoto) e il prodotto di |r1| e

|r2| (risultato = prodotto cartesiano)

•Se r1  r2 è completo allora contiene un numero di tuple pari almeno al massimo fra |r1| e |r2| (nessuna tupla resta esclusa, quindi tutte le tuple della relazione di cardinalità maggiore partecipano sicuramente al join)

•Se X1X2 contiene una chiave per r2, allora r1(X1)  r2(X2) contiene al più |r1| tuple (ogni tupla di r1 si associa al più a una tupla di r2 ).

Join: proprietà

•se il join coinvolge una chiave di r2 e un vincolo di integrità referenziale da r1 a r2, allora il numero di tuple è pari a |r1|

(ogni tupla di r1 si associa ad una e una sola tupla di r2)

•r1  r2 = r2  r1 il join è commutativo

•(r1  r2)  r3 = r1  (r2  r3) il join è associativo Quindi sequenze di join possono essere scritte senza parentesi

Join: proprietà

Per correlare attributi con nome diverso (se cioè X1X2 è vuoto)è possibile fare il theta-join, definito come un prodotto cartesiano seguito da una selezione

r1F r2 = F (r1  r2 ) dove F è la condizione di selezione.

Se F è una condizione di uguaglianza fra un attributo della prima relazione e uno della seconda, allora siamo in presenza di un equi-join. E’ il tipo di join più comune.

Sono importanti formalmente:

il join naturale è basato sui nomi degli attributi

equi-join e theta-join sono basati sui valori

Join

(4)

Rossi A

Neri B

Bianchi B Impiegato Reparto Impiegati

A Mori

B Bruni

B Bruni

B Bruni

Codice Capo Reparti

Impiegati JOINReparto=Codice Reparti Impiegato Reparto Codice Capo Rossi A A A A Mori

Rossi A B Bruni

Neri B A Mori

Neri B B Bruni

Bianchi B A Mori

Bianchi B B Bruni

Rossi A A A A Mori

Neri B B Bruni

Bianchi B B Bruni

SELReparto=Codice

PROJImpiegato,Reparto,Capo (

) Impiegato Reparto

Impiegati

Codice Capo Reparti

Impiegati JOIN (RENReparto  Codice (Reparti)) ma anche (theta-join, accetta qualsiasi pred. logico)

(Impiegati JOIN Reparti)

Join naturale ed equi-join

Impiegati JOINReparto=Codice Reparti (equi-join) equivale a (ridenominazione + join naturale)

Il join naturale non include nel risultato le tuple in cui non c’è corrispondenza fra gli attributi legati dal join (tuple dangling).

Si definiscono altri tipi di join, in cui vengono considerate anche le tuple dangling, utilizzando valori nulli dove non vi sia corrispondenza.

Join esterni

Join sinistro (r1 JOINLEFT r2)

Contribuiscono tutte le tuple di r1, eventualmente estese con valori nulli relativamente agli attributi di r2 se non c’è corrispondenza

Join destro (r1 JOINRIGHT r2)

Contribuiscono tutte le tuple di r2, eventualmente estese con valori nulli relativamente agli attributi di r1 se non c’è corrispondenza

Join completo o full join (r1 JOINFULL r2) Contribuiscono tutte le tuple di r1 e r2, eventualmente estese con valori nulli relativamente agli attributi dell’altra relazione se non c’è corrispondenza

Join

(5)

Impiegato Reparto Rossi A

Neri B

Bianchi B Impiegati

Reparto Capo

B Mori

C Bruni

Reparti

Neri B Mori

Impiegato Reparto Capo Bianchi B Mori Impiegati JOINLEFTReparti

C

Rossi A NULL

A Rossi

Impiegato Reparto Rossi A

Neri B

Bianchi B Impiegati

Reparto Capo

B Mori

C Bruni

Reparti

Neri B Mori

Impiegato Reparto Capo Bianchi B Mori Impiegati JOINRIGHTReparti

A

NULL C Bruni

C Bruni

Impiegato Reparto Rossi A

Neri B

Bianchi B Impiegati

Reparto Capo

B Mori

C Bruni

Reparti

Neri B Mori

Impiegato Reparto Capo Bianchi B Mori Impiegati JOINFULLReparti

NULL C Bruni

C Bruni

A Rossi

Rossi A NULL

Impiegato Reparto Rossi A

Neri B

Bianchi B

Reparto Capo

B Mori

C Bruni

Neri B Mori

Impiegato Reparto Capo

Bianchi B Mori Impiegato Reparto

Neri B

Bianchi B

Reparto Capo

B Mori

Join e proiezioni: problemi

(6)

Neri B Mori Impiegato Reparto Capo

Bianchi B Bruni

Verdi A Bini

Neri B

Impiegato Reparto Bianchi B

Verdi A

B Mori

Reparto Capo

B Bruni

A Bini

Verdi A Bini

Neri B Mori

Impiegato Reparto Capo

Bianchi B Bruni

Neri B Bruni

Bianchi B Mori

Join e proiezioni: problemi

• Date due relazioni R 1(X1) e R 2(X2)

X1 (R1  R2 )  R1

X2 (R1  R2 )  R2

Se proietto il risultato del join sullo schema di una delle due relazioni ne ottengo un sottoinsieme.

Infatti, se non c’è corrispondenza fra alcune tuple di R1 e di R2, tali tuple sono dangling e vengono escluse dal join. Se si tenta quindi di ricostruire le due relazioni originali si ha perdita di informazione.

Join e proiezioni: proprietà

• R(X), X = X1  X2 ( X1 (R)) ( X2 (R)) R

Se scompongo lo schema di una relazione R in due sottoschemi X1 e X2 , R è contenuta nella relazione che si ottiene effettuando il join fra le proiezioni di R su di essi.

Join e proiezioni: proprietà

Riferimenti

Documenti correlati

Her work has been featured in several peer to peer journals such as the Journal of World Business, Journal of Organizational Behaviour, Production Planning & Control,

il il join join naturale è basato sui naturale è basato sui nomi nomi degli attributi degli attributi equi- equi - join e join e theta theta - - join join sono basati sui

President Nayib Bukele’s move in June 2021 has been widely criticised by financial institutions: the International Monetary Fund recently defined it as an “inadvisable shortcut”

Figlio Padre Madre Olga Luigi Anna Filippo Luigi Anna Andrea Franco Maria Aldo Franco Maria. 5 Alias

Si consideri il problema di costruire un B-tree T di grado t che contenga tutte le chiavi di T 1 , tutte le chiavi di T 2 e la chiave k.. 1 Si scriva lo pseudocodice di una

Suggerimento: Procedere come nel caso di unione di due RB-tree vista a lezione, facendo attenzione ai nodi pieni.. 2 Si dimostri la correttezza della

Elencare i reparti che lavorano solo a progetti di budget inferiore a 100.000€ (6 punti) SELECT Reparti.Nome.. FROM Reparti JOIN Progetti ON Reparti.Codice = Progetti.Reparto

[r]