Abbiamo definito il database come un insieme di relazioni e vincoli. Per relazioni si intende la tabella
relazionale, ossia un insieme di tuple con la caratteristica che le righe e le colonne sono disordinate. Le
colonne convenzionalmente sono ordinate ma non sempre per questo vengono chiamate per nome (o
attributo) e non per numero.
L’algebra relazionale è molto importante, in quanto oltre a fornire un fondamento formale per le
operazioni del modello relazionale, è usata come base per implementare e ottimizzare le
interrogazioni nei sistemi di gestione di basi di dati relazionali (RDBMS).
Un’espressione di calcolo relazionale crea una nuova relazione che è specificata in termini di
variabili che assumono valori sulle righe delle relazioni memorizzate nella base di dati e/o sulle
colonne delle relazioni memorizzate.
Introduciamo una serie di operatori relazionali, ovvero gli strumenti che permettono di associare dati ad
altri dati.
Operatore Select
Operatore unario è usato per selezionare ed estrarre dal database un sottoinsieme di tuple di una
relazione (R) che soddisfano una condizione di selezione.
Esempio
P
σ<età≥14>(Persona)
Quindi se applichiamo l’operatore alla tabella Persona verranno estratte solo le
tuple che verifica la condizione età ≥ 14
Persona
Nome
Età
P
Nome
Età
Antonio
10
Franco
15
Franco
15
Giorgio
20
Giorgio
20
Il risultato di questa operazione viene posto nella relazione P ovvero una tabella fittizia con gli stessi attributi
della relazione principale che contiene solo le righe che soddisfano la condizione di selezione.
Operatore π<col1,col2…>(Relazione) quest’operatore si chiama Project estrae determinate colonne dalla tabella
Relazione
Es.
Persona
Nome
Età
Sesso
Antonio
10
M
Franco
15
M
Giorgio
20
null
Anna
10
F
P
π<età,sesso>(Persona)
P
Età
10
15
20
10
Sesso
M
M
null
F
In quest’esempio vengono copiati i dati relativi ad Antonio ed Anna perché il campo sesso è diverso
OPERATORE RENAME: ρ<b1, b2,...., bk> (R)
La sua sintassi e’: P ρ<b1, b2,…., bk> (R).
Si applica ad una relazione R per cambiare il nome degli attributi e crea una nuova relazione. Può
essere usato quando a causa di una Project cambia il valore semantico degli attributi.
Ad esempio in una relazione “Impiegato dirige Dipartimento”, dove “Impiegato” e “Dipartimento”
sono tipi di entità, “dirige” è il tipo di relazione, Nome_impiegato è un attributo del tipo di entità
“Impiegato”, possiamo utilizzare l'operatore rename sull'attributo “Nome_impiegato” cambiandolo in
“Nome_direttore”.
Tutti gli operatori visti finora sono detti operatori unari, essi sono tranquillamente usabili in tutti i
linguaggi visti in precedenza. Per introdurre gli altri tipi di operatori (quelli insiemistici), saremo
costretti a definire le operazioni quali Unioni, Intersezioni, Prodotti cartesiani e differenze
insiemistiche.
OPERATORI INSIEMISTICI: operano su due relazioni alla volta ponendo il risultato
in una terza relazione.
UNIONE
R
PUQ
INTERSEZIONE
R
P∩Q
DIFFERENZA
R
P―Q
PRODOTTO CARTESIANO
R
PxQ
Particolare attenzione riveste il prodotto cartesiano, che prese due tabelle in input ne crea una terza (R)
formata da tutte le coppie possibili delle due tabelle.
OPERATORE JOIN: serve a combinare due relazioni aventi uno o più attributi in comune, generando
una nuova relazione che contiene le righe della prima e della seconda tabella secondo i valori uguali
dell'attributo comune.
La sua sintassi: A <condizione di join> B ->
R
cioè vengono copiate in R tutte le colonne di A e B,
ma colo le righe che verificano la condizione di join.
Inoltre l'operatore Join presenta alcune varianti:
 Se la condizione di join è data dalla condizione di uguaglianza tra due attributi allora
l'operazione viene anche chiamata di EQUIJOIN;
 Se la condizione di join è data da altra natura, allora viene anche chiamata ѲJOIN (Thetajoin);
 Se la condizione di join è un'uguaglianza tra attributi che hanno lo stesso nome, allora viene
anche chiamata NATURAL JOIN. Quest’ultimo punto è rappresentabile anche con (A*B);
 LEFTJOIN: prende tutte le tuple della prima relazione e solo quelle che hanno l’attributo in
comune della seconda relazione;

RIGHTJOIN: prende tutte le tuple della seconda relazione e solo quelle che hanno
l’attributo in comune della prima relazione;

FULL OUTER JOIN: prende tutte le tuple sia della prima che della seconda relazione e se ci
sono corrispondenze tra alcune, queste compariranno sulla stessa riga.
Esercizio
Creazione di un db che contiene questionari
Testo
Numero
Tipo
Testo risp.
Data
Ora
Domanda
Nome
Cod. Fisc
Età
Città
Persona
Rispond
e
d
Aperta
Ammet
te
Chiusa
Testo
Voto
Sceglie
(voto)
Tipo di
Risposta
Questionario
Argomento
Range1
Range2
[email protected]
Appartie
ne a
[email protected]