Proiezione Dati una relazione r(X) e un sottoinsieme Y di X, la proiezione di r su Y si indica con Y...

22
Proiezione Dati una relazione r(X) e un sottoinsieme Y di X, la proiezione di r su Y si indica con Y ( r ) o PROJ Y ( r ) ed è l’insieme di tuple su Y ottenute dalle tuple di r considerando solo i valori su Y. Y ( r ) = { t[Y] | t r } Una proiezione ha un numero di tuple minore o uguale rispetto alla relazione r cui è applicata. Il numero di tuple è uguale se e solo se Y è superchiave per r.

Transcript of Proiezione Dati una relazione r(X) e un sottoinsieme Y di X, la proiezione di r su Y si indica con Y...

Page 1: Proiezione Dati una relazione r(X) e un sottoinsieme Y di X, la proiezione di r su Y si indica con Y ( r ) o PROJ Y ( r ) ed è linsieme di tuple su Y ottenute.

ProiezioneDati una relazione r(X) e un sottoinsieme Y di X, la proiezione di r su Y si indica con

Y ( r ) o PROJY ( r )

ed è l’insieme di tuple su Y ottenute dalle tuple di r considerando solo i valori su Y.

Y ( r ) = { t[Y] | t r }

Una proiezione ha un numero di tuple minore o uguale rispetto alla relazione r cui è applicata. Il numero di tuple è uguale se e solo se Y è superchiave per r.

Page 2: Proiezione Dati una relazione r(X) e un sottoinsieme Y di X, la proiezione di r su Y si indica con Y ( r ) o PROJ Y ( r ) ed è linsieme di tuple su Y ottenute.

Proiezione

• operatore monadico• produce un risultato che• possiede parte degli attributi dell'operando• contiene tuple cui contribuiscono tutte le tuple

dell'operando

• sintassiPROJ ListaAttributi (Operando)

• semanticail risultato contiene le tuple che si ottengono restringendo tutte le tuple dell'operando agli attributi nella lista (ed eliminando gli eventuali duplicati)

Page 3: Proiezione Dati una relazione r(X) e un sottoinsieme Y di X, la proiezione di r su Y si indica con Y ( r ) o PROJ Y ( r ) ed è linsieme di tuple su Y ottenute.

Cognome Filiale StipendioMatricola

Neri Milano 645998Neri Napoli 557309

Rossi Roma 645698Rossi Roma 449553

• visualizzare matricola e cognome di tutti gli impiegati

PROJ Matricola, Cognome (Impiegati)

Cognome Filiale StipendioMatricola

Neri Milano 645998Neri Napoli 557309

Rossi Roma 645698Rossi Roma 449553

PROJ Cognome, Filiale (Impiegati)

• visualizzare cognome e filiale di tutti gli impiegati

Page 4: Proiezione Dati una relazione r(X) e un sottoinsieme Y di X, la proiezione di r su Y si indica con Y ( r ) o PROJ Y ( r ) ed è linsieme di tuple su Y ottenute.

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

Page 5: Proiezione Dati una relazione r(X) e un sottoinsieme Y di X, la proiezione di r su Y si indica con Y ( r ) o PROJ Y ( r ) ed è linsieme di tuple su Y ottenute.

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 insiemi di attributi degli operandi, le cui tuple sono ottenute combinando le tuple degli operandi che hanno valori uguali su attributi comuni (con lo stesso nome).

Page 6: Proiezione Dati una relazione r(X) e un sottoinsieme Y di X, la proiezione di r su Y si indica con Y ( r ) o PROJ Y ( r ) ed è linsieme di tuple su Y ottenute.

Join

Il join naturale r1 r2 di r1(X1) e r2(X2) è una relazione definita su X1X2 ( 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 al grado della somma dei gradi delle due relazioni in quanto gli attributi omonimi compaiono una sola volta.

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

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

Page 7: Proiezione Dati una relazione r(X) e un sottoinsieme Y di X, la proiezione di r su Y si indica con Y ( r ) o PROJ Y ( r ) ed è linsieme di tuple su Y ottenute.

Join

Se ciascuna tupla di ciascuno degli operandi 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.

Ai due estremi si pongono il join vuoto, in cui nessuna tupla degli operandi è combinabile, e quello in cui ciascuna delle tuple di un operando è combinabile con tutte le tuple dell’altro. In questo caso la cardinalità della relazione risultante è pari al prodotto della cardinalità degli operandi. E’ un caso limite, che si verifica solo se esistono attributi comuni che assumono lo stesso valore per ogni tupla di entrambi gli operandi (quindi se l’attributo, di fatto, non

contiene informazione significativa).

Page 8: Proiezione Dati una relazione r(X) e un sottoinsieme Y di X, la proiezione di r su Y si indica con Y ( r ) o PROJ Y ( r ) ed è linsieme di tuple su Y ottenute.

A MoriB Bruni

Reparto CapoRossi ANeri B

Bianchi B

Impiegato Reparto

Rossi A MoriNeri B Bruni

Impiegato Reparto Capo

Bianchi B Bruni

Rossi ANeri B

Bianchi B

Rossi ANeri B

Bianchi B

A MoriB BruniA MoriB BruniB BruniB Bruni

• ogni tupla contribuisce al risultato: il join è completo

Page 9: Proiezione Dati una relazione r(X) e un sottoinsieme Y di X, la proiezione di r su Y si indica con Y ( r ) o PROJ Y ( r ) ed è linsieme di tuple su Y ottenute.

Neri B MoriImpiegato Reparto Capo

Bianchi B Mori

Impiegato RepartoRossi ANeri B

Bianchi B

Reparto CapoB MoriC Bruni

AC

Un join non completo

Page 10: Proiezione Dati una relazione r(X) e un sottoinsieme Y di X, la proiezione di r su Y si indica con Y ( r ) o PROJ Y ( r ) ed è linsieme di tuple su Y ottenute.

Impiegato RepartoRossi ANeri B

Bianchi B

Reparto CapoD MoriC Bruni

Impiegato Reparto Capo

Un join vuoto

Page 11: Proiezione Dati una relazione r(X) e un sottoinsieme Y di X, la proiezione di r su Y si indica con Y ( r ) o PROJ Y ( r ) ed è linsieme di tuple su Y ottenute.

JoinProprietà Il join di r1 e r2 contiene un numero di tuple compreso fra zero e

il prodotto di |r1| e |r2|

se il join di r1 e r2 è completo allora contiene un numero di tuple pari almeno al massimo fra |r1|e |r2|

se X1X2 contiene una chiave per r2, allora il join di r1 (X1) e r2(X2) contiene al più |r1| tuple.

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

r1 r2 = r2 r1 il join è commutativo

(r1 r2) r3 = r1 (r2 r3) il join è associativoQuindi sequenze di join possono essere scritte senza parentesi

Page 12: Proiezione Dati una relazione r(X) e un sottoinsieme Y di X, la proiezione di r su Y si indica con Y ( r ) o PROJ Y ( r ) ed è linsieme di tuple su Y ottenute.

Join

Se si devono correlare attributi con nome diverso (cioè X1X2 è vuoto) è possibile fare il theta-join, definito come un prodotto cartesiano seguito da una selezione

r1 F 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.

Sono importanti formalmente:il join naturale è basato sui nomi degli attributiequi-join e theta-join sono basati sui valori

Page 13: Proiezione Dati una relazione r(X) e un sottoinsieme Y di X, la proiezione di r su Y si indica con Y ( r ) o PROJ Y ( r ) ed è linsieme di tuple su Y ottenute.

Rossi ANeri B

Bianchi B

Impiegato Reparto

Impiegati

A MoriB BruniB BruniB Bruni

Codice Capo

Reparti

Impiegati JOINReparto=Codice Reparti

Impiegato Reparto CapoCodiceRossi A MoriAAARossi A B BruniNeri B MoriANeri B B Bruni

Bianchi B MoriABianchi B B Bruni

Rossi A MoriAAANeri B B Bruni

Bianchi B B Bruni

Page 14: Proiezione Dati una relazione r(X) e un sottoinsieme Y di X, la proiezione di r su Y si indica con Y ( r ) o PROJ Y ( r ) ed è linsieme di tuple su Y ottenute.

Join naturale ed equi-join

Impiegato Reparto

Impiegati

Codice Capo

Reparti

Impiegati JOIN Reparti

PROJImpiegato,Reparto,Capo (

)RENCodice Reparto (Reparti)Impiegati JOIN

SELReparto=Codice

( )

Page 15: Proiezione Dati una relazione r(X) e un sottoinsieme Y di X, la proiezione di r su Y si indica con Y ( r ) o PROJ Y ( r ) ed è linsieme di tuple su Y ottenute.

Impiegato RepartoRossi ANeri B

Bianchi B

Reparto CapoB MoriC Bruni

Neri B MoriImpiegato Reparto Capo

Bianchi B Mori

AC

Join, una difficoltà

alcune tuple non contribuiscono al risultato: vengono "tagliate fuori” (tuple dangling)

Page 16: Proiezione Dati una relazione r(X) e un sottoinsieme Y di X, la proiezione di r su Y si indica con Y ( r ) o PROJ Y ( r ) ed è linsieme di tuple su Y ottenute.

Join

Join EsterniIl join naturale tralascia le tuple in cui non vi è corrispondenza fra gli attributi legati dal join. Si definiscono allora altri tipi di join, che fanno sì che anche quelle tuple vengano considerate, inserendo valori nulli dove non vi sia corrispondenza.

Join sinistro (left join)Contribuiscono tutte le tuple del primo operando eventualmente estese con valori nulli

Join destro (right join)Contribuiscono tutte le tuple del secondo operando eventualmente estese con valori nulli

Join completo (full join)Contribuiscono tutte le tuple del primo e del secondo operando eventualmente estese con valori nulli

Page 17: Proiezione Dati una relazione r(X) e un sottoinsieme Y di X, la proiezione di r su Y si indica con Y ( r ) o PROJ Y ( r ) ed è linsieme di tuple su Y ottenute.

Impiegato RepartoRossi ANeri B

Bianchi B

ImpiegatiReparto Capo

B MoriC Bruni

Reparti

Neri B MoriImpiegato Reparto Capo

Bianchi B Mori

Impiegati JOINLEFT Reparti

C

Rossi A NULL

ARossi

Page 18: Proiezione Dati una relazione r(X) e un sottoinsieme Y di X, la proiezione di r su Y si indica con Y ( r ) o PROJ Y ( r ) ed è linsieme di tuple su Y ottenute.

Impiegato RepartoRossi ANeri B

Bianchi B

ImpiegatiReparto Capo

B MoriC Bruni

Reparti

Neri B MoriImpiegato Reparto Capo

Bianchi B Mori

Impiegati JOINRIGHT Reparti

A

NULL C Bruni

C Bruni

Page 19: Proiezione Dati una relazione r(X) e un sottoinsieme Y di X, la proiezione di r su Y si indica con Y ( r ) o PROJ Y ( r ) ed è linsieme di tuple su Y ottenute.

Impiegato RepartoRossi ANeri B

Bianchi B

ImpiegatiReparto Capo

B MoriC Bruni

Reparti

Neri B MoriImpiegato Reparto Capo

Bianchi B Mori

Impiegati JOINFULL Reparti

NULL C Bruni

C BruniARossi

Rossi A NULL

Page 20: Proiezione Dati una relazione r(X) e un sottoinsieme Y di X, la proiezione di r su Y si indica con Y ( r ) o PROJ Y ( r ) ed è linsieme di tuple su Y ottenute.

Join e proiezioni: problemi

Impiegato RepartoRossi ANeri B

Bianchi B

Reparto CapoB MoriC Bruni

Neri B MoriImpiegato Reparto Capo

Bianchi B Mori

Impiegato RepartoNeri B

Bianchi B

Reparto CapoB Mori

Page 21: Proiezione Dati una relazione r(X) e un sottoinsieme Y di X, la proiezione di r su Y si indica con Y ( r ) o PROJ Y ( r ) ed è linsieme di tuple su Y ottenute.

Join e proiezioni: problemi

Neri B MoriImpiegato Reparto Capo

Bianchi B BruniVerdi A Bini

Neri BImpiegato Reparto

Bianchi BVerdi A

B MoriReparto Capo

B BruniA Bini

Verdi A Bini

Neri B MoriImpiegato Reparto Capo

Bianchi B BruniNeri B Bruni

Bianchi B Mori

Page 22: Proiezione Dati una relazione r(X) e un sottoinsieme Y di X, la proiezione di r su Y si indica con Y ( r ) o PROJ Y ( r ) ed è linsieme di tuple su Y ottenute.

Join e proiezioni

R 1(X1), R 2(X2)

X1 (R 1 R2 ) R 1

R(X), X = X1 X2

( X1 (R)) ( X2

(R)) R