• Non ci sono risultati.

dell'algebra relazionale in quanto permette di con matricola 7309) da una singola relazione (nel Join

N/A
N/A
Protected

Academic year: 2022

Condividi "dell'algebra relazionale in quanto permette di con matricola 7309) da una singola relazione (nel Join"

Copied!
21
0
0

Testo completo

(1)

Combinando selezione e proiezione, si può estrarre qualunque elemento (es. lo stipendio dell’impiegato con matricola 7309) da una singola relazione (nel nostro caso, la tabella Impiegati). 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

(2)

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.

Nella situazione più comune, produce 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 (cioè che hanno lo stesso nome nei due schemi).

Join (naturale)

(3)

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 di tale relazione (numero attributi) è minore o uguale alla somma dei gradi delle due relazioni poiché gli attributi omonimi compaiono una sola volta.

Per questo motivo la definizione implica, normalmente, 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

(4)

Due casi limite:

join vuoto, le due tabelle hanno alcuni attributi in comune ma nessuna tupla di un operando è combinabile con nessuna tupla dell’altro.

prodotto cartesiano degli operandi: ciascuna delle tuple di un operando è combinabile con tutte le tuple dell’altro. Può verificarsi se le due relazioni non hanno attributi in comune.

Join

(5)

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

Dimostrazione

Le due relazioni non hanno attributi comuni => ogni tupla della prima relazione può concatenarsi con ogni tupla della seconda, soddisfacendo la definizione di join.

Se le due relazioni hanno lo stesso schema (X1 = X2) il join naturale equivale all’intersezione fra le relazioni.

Dimostrazione

Ogni tupla può «concatenarsi» solo con una tupla uguale

=> è presente nel risultato finale se e solo se è presente in entrambe le relazioni. NB Genera la tupla stessa

Join

(6)

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 quindi non contribuiscono al risultato, le tuple si dicono dangling.

Join

(7)

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

(8)

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

(9)

Impiegato Reparto Rossi A

Neri B

Bianchi B

Reparto Capo

D Mori

C Bruni

Impiegato Reparto Capo

Un Join vuoto

(10)

r

1

 r

2

contiene un numero di tuple compreso fra zero

(risultato = insieme vuoto)

e il prodotto di |r

1

| e

|r

2

|

(risultato = prodotto cartesiano)

Se r

1

 r

2

è completo allora contiene un numero di tuple pari almeno al massimo fra |r

1

| e |r

2

|

(nessuna tupla resta esclusa, quindi tutte le tuple della relazione di cardinalità maggiore partecipano

sicuramente al join)

Se X

1

X

2

contiene una chiave per r

2,

allora

r

1

(X

1

)  r

2

(X

2

) contiene al più |r

1

| tuple

(ogni tupla di r1 si associa al più a una tupla di r2 ).

Join: proprietà

(11)

se il join coinvolge una chiave di r

2

e un vincolo di integrità referenziale da r

1

a r

2

, allora il

numero di tuple è pari a |r

1

|

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

r

1

 r

2

= r

2

 r

1

il join è commutativo

(r

1

 r

2

)  r

3

= r

1

 (r

2

 r

3

) il join è associativo Quindi sequenze di join possono essere scritte senza parentesi

Join: proprietà

(12)

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

(13)

Il theta-join, espresso come prodotto cartesiano seguito da una selezione, è il tipo di join operativamente più generale. Infatti:

• Consente di associare (concatenare) tuple attraverso la corrispondenza fra attributi arbitrari e non necessariamente omonimi

• Consente di basare l’associazione su una arbitraria condizione e non solo su una condizione di uguaglianza

Join

(14)

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

(15)

SEL

Reparto=Codice

(Impiegati JOIN Reparti) Il risultato è definito sullo schema

con valori identici per ogni tupla per gli attributi Reparto e Codice (inutilmente duplicati)

Impiegato Reparto Impiegati

Codice Capo Reparti

Join naturale ed equi-join

Impiegati

JOINReparto=Codice

Reparti

(equi-join)

equivale a

Impiegato Reparto Codice Capo

(16)

PROJ

Impiegato,Reparto,Capo

(

)

SEL

Reparto=Codice

Impiegato Reparto

Impiegati

Codice Capo Reparti

Impiegati JOIN (REN

Reparto  Codice

(Reparti)) il risultato sarebbe stato definito sullo schema

che equivale, in realtà, a (gli attributi resi omonimi

dalla ridenominazione compaiono una sola volta)

(Impiegati JOIN Reparti)

Join naturale ed equi-join

Se avessi usato

ridenominazione + join naturale

Impiegato Reparto Capo

(17)

Il join naturale e il theta-join non includono nel risultato le tuple in cui non c’è corrispondenza fra gli attributi legati dal join (tuple dangling).

Questo fa sì che il risultato non contenga tutta l’informazione contenuta nelle relazioni di partenza

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

Join esterni

(18)

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 con tuple di r2

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 con tuple di r1

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 con tuple dell’altra relazione.

Join esterni

(19)

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

JOINLEFT

Reparti

C

Rossi A

NULL

A

Rossi

(20)

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

JOINRIGHT

Reparti

A

NULL

C Bruni

C Bruni

(21)

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

JOINFULL

Reparti

NULL

C Bruni

C Bruni

A Rossi

Rossi A

NULL

Riferimenti

Documenti correlati

TALETE è la nuova soluzione Valagro in grado di assicurare una produzione sostenibile attraverso una corretta ed accurata gestione sostenibile delle risorse idriche, sia

Analisi della regressione: per sviluppare un modello statistico che possa essere usato per prevedere i valori di una variabile, detta dipendente o più raramente predetta ed

 La stima della significatività della retta o verifica dell'esistenza di una relazione lineare tra le variabili può essere condotta anche con il test t di Student, con

Per partecipare: occorre richiedere l’iscrizione al Centro per le Famiglie tramite e-mail, per ottenere l’indirizzo Zoom della sala che sarà lo stesso per tutti

Un aspetto particola- re della sicurezza della circolazione riguarda la presenza di cantieri e, più in generale, di lavori stradali che costituiscono una fonte di peri- colo per

• quali sono le percentuali preventivate di destinatari dei vaccini, in ciascuna per Area Vasta, divisi in base alle specifiche categorie di cittadini da vaccinare (definite nel

[r]

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,