Interrogazione di una base di
dati relazionale
Algebra relazionale
Algebra relazionale
Linguaggio formale per interrogare una base di
dati relazionale: consiste di un insieme di operatori
che possono essere applicati a una (operatori
unari) o due (operatori binari) istanze di relazione
e forniscono un’istanza di relazione
Linguaggio procedurale: l’interrogazione consiste
in un’espressione in cui compaiono operatori
dell’algebra e istanze di relazioni della base di dati
Proiezione
• Consente di effettuare un “taglio
verticale” su una relazione, cioè di
selezionare solo alcune colonne
(attributi)
• Si denota con il simbolo :
A1,A2,…,Ak(r)
seleziona le colonne di r che
corrispondono agli attributi A1,A2,…,Ak
Proiezione
Cliente Nome
C#
Città
Rossi
C1
Roma
Rossi
C2
Milano
Bianchi
C3
Roma
Verdi
C4
Roma
Nome(Cliente)
Query: Nomi dei clienti
Rossi
Bianchi
Verdi
Proiezione
Cliente Nome
C#
Città
Rossi
C1
Roma
Rossi
C2
Milano
Bianchi
C3
Roma
Verdi
C4
Roma
Nome,C#(Cliente)
Query: Nomi e codici
dei clienti
Rossi
C1
Rossi
C2
Bianchi
C3
Verdi
C4
Selezione
• Consente di effettuare un “taglio
orizzontale” su una relazione, cioè di
selezionare solo le righe (tuple) che
soddisfano una data condizione
• Si denota con il simbolo :
C(r)
seleziona le tuple di r che soddisfano la
condizione C
Selezione
La condizione di selezione è un’espressione
booleana (operatori , e ) in cui i termini semplici
sono del tipo:
AB
oppure
A’a’
dove:
•  è un operatore di confronto (,,,,)
• A e B sono due attributi con lo stesso dominio
(dom(A)=dom(B))
• a è un elemento di dom(A) (adom(A))
Selezione
Cliente Nome
C#
Città
Rossi
C1
Roma
Rossi
C2
Milano
Bianchi
C3
Roma
Verdi
C4
Roma
Città=‘Roma’(Cliente)
Query: Dati dei clienti
che risiedono a Roma
Rossi
C1
Roma
Bianchi
C3
Roma
Verdi
C4
Roma
Selezione
Cliente Nome
C#
Città
Rossi
C1
Roma
Rossi
C2
Milano
Bianchi
C3
Roma
Verdi
C4
Roma
Query: Dati dei clienti
che si chiamano Rossi
e risiedono a Roma
Rossi
Città=‘Roma’Nome=‘Rossi’(Cliente)
C1
Roma
Prodotto cartesiano
• Consente di costruire una relazione
contenente tutte le tuple che si
ottengono concatenando una tupla del
primo operando con una tupla del
secondo operando
• Si denota con il simbolo x
r1xr2
Unione
• Consente di costruire una relazione
contenente tutte le tuple che
appartengono ad almeno uno dei due
operandi
• Si denota con il simbolo 
r1  r2
r1
r2
Differenza
• Consente di costruire una relazione
contenente tutte le tuple che
appartengono al primo operando e non
appartengono al secondo operando
• Si denota con il simbolo 
r1  r2
r1
r2
Intersezione
• Consente di costruire una relazione
contenente tutte le tuple che
appartengono ad entrambi gli operandi
• Si denota con il simbolo 
r1  r2= (r1  (r1  r2 ))
r1
r2
-join
• Consente di selezionare le tuple del prodotto
cartesiano dei due operandi che soddisfano una
condizione del tipo
AB
dove
  è un operatore di confronto (,,,,),
 A è un attributo dello schema del primo operando,
 B è un attributo dello schema del secondo operando e
 dom(A)=dom(B)
• r1  r2 = AB (r1 x r2 )
AB
Join naturale
• Consente di selezionare le tuple del prodotto
cartesiano dei due operandi che soddisfano la
condizione:
R1.A1= R2.A1  R1.A2= R2.A2 …  R1.Ak= R2.Ak
(dove R1 ed R2 sono i nomi delle relazioni operando e
A1,,A2,…, Ak sono gli attributi comuni delle relazioni
operando) eliminando le ripetizioni degli attributi
• r1  r2 = XY(C (r1 x r2 ))
dove:
C: R1.A1= R2.A1 …  R1.Ak= R2.Ak
X è l’insieme di attributi di r1
Y è l’insieme di attributi di r2 che non sono attributi di r1
Join naturale
Cliente Nome
C#
Città
Rossi
C1
Roma
Rossi
C2
Milano
Bianchi
C3
Roma
Verdi
C4
Roma
Ordine
C#
A#
N-pezzi
C1
A1
100
C2
A2
200
C3
A2
150
C4
A3
200
C1
A2
200
C1
A3
100
Query: Dati dei clienti e dei loro ordini
Cliente  Ordine
Nome
C#
Città
A#
N-pezzi
Rossi
C1
Roma
A1
100
Rossi
C1
Roma
A2
200
Rossi
C1
Roma
A3
100
Rossi
C2
Milano
A2
200
Bianchi
C3
Roma
A2
150
Verdi
C4
Roma
A3
200
Esempio 1
Query : Nomi dei clienti che hanno ordinato
più di 100 pezzi per almeno un articolo
Ordine
C#
A#
N-pezzi
C1
A1
100
C2
A2
200
C3
A2
150
Cliente Nome
C#
Città
Rossi
C1
Roma
Rossi
C2
Milano
Bianchi
C3
Roma
C4
A3
200
Verdi
C4
Roma
C1
A2
200
C1
A3
100
 NomeN-pezzi>100Cliente Ordine
Esempio 1
Cliente Ordine
Nome
C#
Città
A#
N-pezzi
Rossi
C1
Roma
A1
100
Rossi
C1
Roma
A2
200
Rossi
C1
Roma
A3
100
Rossi
C2
Milano
A2
200
Bianchi
C3
Roma
A2
150
Verdi
C4
Roma
A3
200
Esempio 1
N-pezzi>100Cliente Ordine
Nome
C#
Città
A#
N-pezzi
Rossi
C1
Roma
A2
200
Rossi
C2
Milano
A2
200
Bianchi
C3
Roma
A2
150
Verdi
C4
Roma
A3
200
Esempio 1
 NomeN-pezzi>100Cliente Ordine
Nome
Rossi
Bianchi
Verdi
Esempio 2
Query : Nomi e città dei clienti che hanno ordinato più di 100
pezzi per almeno un articolo con prezzo superiore a 2
Cliente Nome
C#
Città
Rossi
C1
Rossi
Articolo
C#
A#
N-pezzi
Roma
C1
A1
100
C2
Milano
C2
A2
200
Bianchi
C3
Roma
C3
A2
150
Verdi
C4
Roma
C4
A3
200
Prezzo
C1
A2
200
C1
A3
100
A#
Denom.
A1
Piatto
3
A2
Bicchiere 2
A3
Tazza
Ordine
4
 Nome,CittàN-pezzi>100Prezzo>2(Cliente Ordine  Articolo)
Esempio 2
(Cliente Ordine  Articolo
Nome
C#
Città
A#
N-pezzi
Denom.
Prezzo
Rossi
C1
Roma
A1
100
Piatto
3
Rossi
C1
Roma
A2
200
Bicchiere
2
Rossi
C1
Roma
A3
100
Tazza
4
Rossi
C2
Milano
A2
200
Bicchiere
2
Bianchi
C3
Roma
A2
150
Bicchiere
2
Verdi
C4
Roma
A3
200
Tazza
4
Esempio 2
N-pezzi>100Prezzo>2(Cliente Ordine  Articolo)
Nome
C#
Città
A#
N-pezzi
Denom.
Prezz
o
Verdi
C4
Roma
A3
200
Tazza
4
Esempio 2
 Nome,CittàN-pezzi>100Prezzo>2(Cliente  Ordine  Articolo)
Nome
Città
Verdi
Roma
Esempio 2
Query : Nomi e città dei clienti che hanno ordinato più di 100
pezzi per almeno un articolo con prezzo superiore a 2
Cliente Nome
C#
Città
Rossi
C1
Rossi
Articolo
Nome,Città
C#
A#
N-pezzi
Roma
C1
A1
100
C2
Milano
C2
A2
200
Bianchi
C3
Roma
C3
A2
150
Verdi
C4
Roma
C4
A3
200
Prezzo
C1
A2
200
C1
A3
100
A#
Denom.
A1
Piatto
3
A2
Bicchiere 2
A3
Tazza
Ordine
4
((Cliente  N-pezzi>100(Ordine))  Prezzo>2 (A#,Prezzo(Articolo)))
Esempio 2
Nome,Città
((Cliente  N-pezzi>100(Ordine))  Prezzo>2 (A#,Prezzo(Articolo)))
C#
A#
N-pezzi
C2
A2
200
C3
A2
150
C4
A3
200
C1
A2
200
N-pezzi>100(Ordine)
Esempio 2
Nome,Città
((Cliente  N-pezzi>100(Ordine))  Prezzo>2 (A#,Prezzo(Articolo)))
Nome
C#
Città
A#
N-pezzi
Rossi
C1
Roma
A2
200
Rossi
C2
Milano
A2
200
Bianchi
C3
Roma
A2
150
Verdi
C4
Roma
A3
200
Cliente  N-pezzi>100(Ordine )
Esempio 2
Nome,Città
((Cliente  N-pezzi>100(Ordine))  Prezzo>2 (A#,Prezzo(Articolo)))
A#
Prezzo
A1
3
A2
2
A3
4
A#,Prezzo(Articolo)
Esempio 2
Nome,Città
((Cliente  N-pezzi>100(Ordine))  Prezzo>2 (A#,Prezzo(Articolo)))
A#
Prezzo
A1
3
A3
4
Prezzo>2 (A#,Prezzo(Articolo))
Esempio 2
Nome,Città
((Cliente  N-pezzi>100(Ordine))  Prezzo>2 (A#,Prezzo(Articolo)))
Nome
C#
Città
A#
N-pezzi Prezzo
Verdi
C4
Roma
A3
200
4
(Cliente  N-pezzi>100(Ordine))  Prezzo>2 (A#,Prezzo(Articolo))
Esempio 2
Nome,Città
((Cliente  N-pezzi>100(Ordine ))  Prezzo>2 (A#,Prezzo(Articolo)))
Nome
Città
Verdi
Roma