Join 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. 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.
AMori BBruni RepartoCapo RossiA NeriB BianchiB ImpiegatoReparto RossiAMori NeriBBruni ImpiegatoRepartoCapo BianchiBBruni RossiA NeriB BianchiB RossiA NeriB BianchiB AMori BBruni AMori BBruniB B ogni tupla contribuisce al risultato: il join è completo
NeriBMori ImpiegatoRepartoCapo BianchiBMori ImpiegatoReparto RossiA NeriB BianchiB RepartoCapo BMori CBruni A C Un join non completo
ImpiegatoReparto RossiA NeriB BianchiB RepartoCapo DMori CBruni ImpiegatoRepartoCapo Un join vuoto
Join Proprietà Il join di r 1 e r 2 contiene un numero di tuple compreso fra zero e il prodotto di |r 1 | e |r 2 | se il join di r 1 e r 2 è completo allora contiene un numero di tuple pari almeno al massimo fra |r 1 |e |r 2 | se X 1 X 2 contiene una chiave per r 2, allora il join di r 1 (X 1 ) e r 2 (X 2 ) contiene al più |r 1 | tuple.
Join Proprietà se il join coinvolge una chiave di r 2 e un vincolo di integrità referenziale, allora il numero di tuple è pari a |r 1 | 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 Se si devono correlare attributi con nome diverso (cioè X 1 X 2 è vuoto) è possibile fare il theta-join, definito come un prodotto cartesiano seguito da una selezione r 1 F r 2 = F (r 1 r 2 ) 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 attributi equi-join e theta-join sono basati sui valori
RossiA NeriB BianchiB ImpiegatoReparto Impiegati AMori BBruniB B CodiceCapo Reparti Impiegati JOIN Reparto=Codice Reparti ImpiegatoRepartoCapoCodice RossiAMoriAAA RossiABBruni NeriBMoriA NeriBBBruni BianchiBMoriA BianchiBBBruni RossiAMoriAAA NeriBBBruni BianchiBBBruni
SEL Reparto=Codice PROJ Impiegato,Reparto,Capo ( ) Join naturale ed equi-join ImpiegatoReparto Impiegati CodiceCapo Reparti Impiegati JOIN (REN Reparto Codice (Reparti)) equivale a (Impiegati JOIN Reparti)
ImpiegatoReparto RossiA NeriB BianchiB RepartoCapo BMori CBruni NeriBMori ImpiegatoRepartoCapo BianchiBMori A C Join incompleto alcune tuple non contribuiscono al risultato: vengono "tagliate fuori” (tuple dangling)
Join Join Esterni Il 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 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
ImpiegatoReparto RossiA NeriB BianchiB Impiegati RepartoCapo BMori CBruni Reparti NeriBMori ImpiegatoRepartoCapo BianchiBMori Impiegati JOIN LEFT Reparti C RossiA NULL ARossi
ImpiegatoReparto RossiA NeriB BianchiB Impiegati RepartoCapo BMori CBruni Reparti NeriBMori ImpiegatoRepartoCapo BianchiBMori Impiegati JOIN RIGHT Reparti A NULL CBruni C
ImpiegatoReparto RossiA NeriB BianchiB Impiegati RepartoCapo BMori CBruni Reparti NeriBMori ImpiegatoRepartoCapo BianchiBMori Impiegati JOIN FULL Reparti NULL CBruni C ARossi A NULL
Join e proiezioni: problemi ImpiegatoReparto RossiA NeriB BianchiB RepartoCapo BMori CBruni NeriBMori ImpiegatoRepartoCapo BianchiBMori ImpiegatoReparto NeriB BianchiB RepartoCapo BMori
Join e proiezioni: problemi NeriBMori ImpiegatoRepartoCapo BianchiBBruni VerdiABini NeriB ImpiegatoReparto BianchiB VerdiA BMori RepartoCapo BBruni ABini VerdiABini NeriBMori ImpiegatoRepartoCapo BianchiBBruni NeriBBruni BianchiBMori
Join e proiezioni R 1 (X 1 ), R 2 (X 2 ) X 1 (R 1 R 2 ) R 1 X 2 (R 1 R 2 ) R 2 R(X), X = X 1 X 2 ( X 1 (R)) ( X 2 (R)) R
Interrogazioni (Query) Un’interrogazione è una funzione E(r) che applicata ad istanze r di una base di dati produce una relazione su un dato insieme di attributi X. Le interrogazioni su uno schema di base di dati R in algebra relazionale sono espressioni i cui atomi (le variabili) sono relazioni in R.
Esempi Impiegati NomeEtàStipendioMatricola Bianchi Rossi Bruni Neri Mori Lupi Supervisione ImpiegatoCapo
Trovare matricola, nome, età e stipendio degli impiegati che guadagnano più di 40 milioni SEL Stipendio>40 (Impiegati) NomeEtàStipendioMatricola Bianchi Rossi Bruni Neri Mori Lupi Bianchi Neri Rossi Bruni Mori Lupi Rossi Bruni Mori Lupi
Trovare matricola, nome ed età degli impiegati che guadagnano più di 40 milioni PROJ Matricola, Nome, Età ( SEL Stipendio>40 (Impiegati)) NomeEtàStipendioMatricola Bianchi Rossi Bruni Neri Mori Lupi Bianchi Neri Rossi Bruni Mori Lupi Rossi Bruni Mori Lupi