Algebra relazionale Linguaggio dallo stile operazionale, in quanto rappresenta il piano di esecuzione di una query. Definisce un insieme di operazioni su relazioni. Le operazioni hanno come operandi una o due relazioni e come risultato una nuova relazione. Esistono 5 operatori di base, a partire dai quali è possibile ottenere altri operatori derivati. Le operazioni si compongono in espressioni complesse che rappresentano query. L insieme di tutte le query esprimibili attraverso espressioni dell algebra relazionale definisce il potere espressivo del linguaggio.
Operatori di base SELEZIONE σ F (r) operatore unario input: relazione r di schema R(X) predicato F composto da: operandi: attributi di R(X) e costanti operatori: di confronto e logici output: relazione di schema R(X): σ F (r) = {t t r. F(t) = true}
Operatori di base SELEZIONE σ F (r) r: a 1 a w 9 q a 2 e a 4 e F: A = a F: B > 3 and C = q a 1 a w 9 q a 2 e a 4 e
Operatori di base PROIEZIONE π Y (r) operatore unario input: relazione r di schema R(X) Y X output: relazione di schema R(Y): π Y (r) = {t[y] t r}
Operatori di base PROIEZIONE π Y (r) r: a 1 a w 9 q a 2 e a 2 f a 4 e Y: A Y: AB A A B a a 1 w w 9 a 2 a 4
Operatori di base UNIONE r s operatore binario input: relazioni r e s di schema R(X) output: relazione di schema R(X): r s = {t t r t s}
Operatori di base UNIONE r s a 1 a b 3 a a 1 a w 9 q r: s: a 2 e a 4 e f 1 e a 4 e r s: w 9 q a 2 e a 4 e b 3 a f 1 e
Operatori di base DIFFERENZA r s operatore binario input: relazioni r e s di schema R(X) output: relazione di schema R(X): r s = {t t r t s}
Operatori di base DIFFERENZA r s a 1 a b 3 a a 1 a w 9 q r: s: a 2 e f 1 e a 4 e r s: w 9 q a 2 e a 4 e
Operatori di base PRODOTTO CARTESIANO r x s operatore binario input: relazione r di schema R(X) e s di schema S(Y) output: relazione di schema P(XY): r x s = {t t = t r [X]t s [Y]. t r [X] r, t s [Y] s}
Operatori di base PRODOTTO CARTESIANO r x s a 1 a r: s: w 9 q A D m 2 h 1 r x s: R. S.A D a 1 a m 2 a 1 a h 1 w 9 q m 2 w 9 q h 1
Operatore di renaming Operatore unario che rinomina attributi o relazioni. Il renaming è un operatore utile quando si compongono espressioni, in quanto consente di evitare ambiguità rinominando attributi o relazioni. ρ(r,r) rinomina r in r ρ A A (r) rinomina A in A per la relazione r
Operatori derivati INTERSEZIONE r s operatore binario input: relazioni r e s di schema R(X) output: relazione di schema R(X): r s = r (r s)
Operatori derivati INTERSEZIONE r s a 1 a w 9 q r: s: b 3 a f 1 e r s: a 4 e a 2 e a 4 e a 4 e
Operatori derivati DIVISIONE r s operatore binario input: output: relazioni r di schema R(X) e s di schema S(Y) tali che Y X. relazione di schema D(X-Y) che contiene ogni tupla t d tale che per ogni t s in s: t d [X-Y]t s [Y] r r s = π x-y (r) π x-y ((π x-y (r) x s) r)
Operatori derivati DIVISIONE r s a 1 a w 1 a r: s: a 2 a B C 1 a 2 a r s: A a w 4 b
Operatori derivati JOIN r s F operatore binario input: output: relazioni r di schema R(X) e s di schema S(Y) predicato F costituito da predicati di join della forma: A θ B dove A X, B Y, e θ è un operatore di confronto. I predicati di join si possono combinare in espressioni tramite operatori logici. r s = σ F (r x s) F In genere si parla di θ-join (equi-join se θ è l operatore di uguaglianza)
Operatori derivati JOIN r s F a 1 a w 1 a r: s: a 2 a w 4 b D E 1 a 2 a r s: F F: B=D D E a 1 a 1 a w 1 a 1 a a 2 a 2 a
Operatori derivati JOIN NATURALE r s operatore binario input: relazioni r di schema R(X) e s di schema S(Y) output: r s = π xy (σ F (r x s)) dove F: (R.A = S.A) A X Y Il join naturale corrisponde ad eseguire un equi-join su tutti gli attributi comuni ai due schemi e a proiettare il risultato sull unione degli attributi
Operatori derivati JOIN NATURALE r s a 1 a w 1 a f 2 a g 4 b B C D 1 a 3 r: s: r s: 2 a 1 D a 1 a 3 w 1 a 3 f 2 a 1
Operatori derivati JOIN NATURALE r s r relazione di schema R(X) s relazione di schema S(Y) Qual è il risultato se X=Y? r s = r s Qual è il risultato se X Y =? r s = r x s
Operatori derivati JOIN ESTERNO SINISTRO r s (left outer join) LEFT Estensione del join naturale in cui ogni tupla di r fa parte del risultato, eventualmente estesa con valori NULL ove non vi sia controparte opportuna in s. a 1 a B C D D a 1 a 3 w 1 a r: s: f 2 a g 4 b 1 a 3 2 a 1 r s: LEFT w 1 a 3 f 2 a 1 g 4 b null
Operatori derivati JOIN ESTERNO DESTRO r s (right outer join) RIGHT Estensione del join naturale in cui ogni tupla di s fa parte del risultato, eventualmente estesa con valori NULL ove non vi sia controparte opportuna in r. a 1 a B C D D a 1 a 3 w 1 a r: s: f 2 a 1 a 3 2 b 2 r s: RIGHT w 1 a 3 f 2 a 1 g 4 b 2 a 1 null 2 b 2
Operatori derivati Unendo le due definizioni precedenti, si ottiene il join completo (full join), in cui ogni tupla di r e s fa parte del risultato, eventualmente estesa con valori NULL ove non vi sia controparte opportuna. a 1 a w 1 a r: s: f 2 a B C D 1 a 3 2 a 1 r s: FULL D a 1 a 3 w 1 a 3 f 2 a 1 g 4 b null g 4 b 3 b 2 null 3 b 2
Algebra relazionale: esempio Sailor(Sid, Sname, Srate, Sage) Boat(Bid, Bname, Bcolor) Rent(Sid, Bid, date) Sid Sname Srate Sage 22 Popeye 9 56 b: Bid Bname Bcolor 129 Sealion red 72 Alinghi red 313 Bathtub blu Sid Bid Rdate s: 18 Soldini 8 38 7 Rusty 6 63 r: 22 72 2004/12/10 18 313 2005/07/07 28 Lubber 2 22 28 313 2005/29/07
Trovare i nomi dei marinai che hanno noleggiato la barca 313. π Sname (σ Bid= 313 (s r)) Trovare i nomi dei marinai che hanno noleggiato una barca rossa. π Sname (σ Bcolor= red ((s r) b)) π Sname (π Sid (σ Bcolor= red (b) r) s) Trovare i nomi dei marinai che hanno noleggiato una barca rossa o verde. π Sname (σ Bcolor= red or Bcolor= green ((s r) b))
Trovare i nomi dei marinai che hanno noleggiato una barca rossa ed una barca verde. π Sname (σ Bcolor= red ((s r) b)) π Sname (σ Bcolor= green ((s r) b)) Trovare i nomi dei marinai che hanno noleggiato tutte le barche. π Sname ((π Sid,Bid (r) π Bid (b)) s) Trovare i nomi dei marinai che hanno noleggiato tutte le barche verdi. π Sname ((π Sid,Bid (r) π Bid (σ Bcolor= green (b))) s)
Trovare le coppie di marinai tali che il primo è più vecchio ma meno esperto del secondo. π Sname,Sname (ρ Sid Sid (s) Sname Sname Srate Srate Sage Sage Sage >Sage Srate < Srate ρ Sid Sid (s)) Sname Sname Srate Srate Sage Sage Trovare le coppie di marinai che hanno noleggiato la stessa barca. π Sname,Sname (ρ Sid Sid (s r) ρ Sid Sid (s r))... Sid >Sid Bid = Bid...
Trovare la barca noleggiata più recentemente....intanto troviamo la data più recente tra quelle relative ai noleggi: π Rdate (ρ Sid Sid (r)) (π Rdate (ρ Sid Sid (r) ρ Sid Sid (r)))...... Rdate < Rdate...e chiamiamo d (di schema D(Rdate )) la relazione risultante.... Quindi troviamo le barche noleggiate in tale data: π Bid (ρ Sid Sid (r) d)...
LIBRERIA (Nome, Piva, Indirizzo, Città) LIBRO (CodL, Titolo, Editore) AUTORE (CodA, Cognome, Nome, Nazionalità) SCRITTO (CodL, CodA) VENDITA (PIva, CodL, NumCopie) 1) Visualizzare i nomi di tutti gli autori di nazionalità italiana 2) Visualizzare tutte le librerie di Roma 3) Selezionare l editore del libro Basi di Dati 4) Trovare il codice dei libri scritti da Umberto Eco 5) Trovare i nomi degli autori del libro Basi di Dati
6) Selezionare le librerie che hanno venduto più di 100 copie del libro Il nome della rosa 7) Visualizzare i libri che hanno venduto almeno una copia nella libreria Gasperini di Rimini 8) Visualizzare i libri che hanno venduto almeno 10 copie nella libreria Gasperini di Rimini 9) Visualizzare i libri che non hanno vendito nessuna copia nella libreria Gasperini di Rimini 10) Visualizzare i libri che hanno venduto almeno una copia in tutte le librerie di Rimini 11) Visualizzare i libri editi da Bompiani 12) Mostrare l indirizzo della libreria Mille pagine di Roma