Post on 01-May-2015
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
ProiezioneCliente Nome CodC Comune
Rossi C1 Roma
Rossi C2 Milano
Bianchi C3 Roma
Verdi C4 Roma
Rossi
Bianchi
Verdi
Query: Nomi dei clienti
Nome(Cliente)
ProiezioneCliente Nome CodC Comune
Rossi C1 Roma
Rossi C2 Milano
Bianchi C3 Roma
Verdi C4 Roma
Query: Nomi e codici dei clienti
Nome,CodC(Cliente)
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:
AB 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) (adom(A))
SelezioneCliente Nome CodC Comune
Rossi C1 Roma
Rossi C2 Milano
Bianchi C3 Roma
Verdi C4 Roma
Query: Dati dei clientiche risiedono a Roma
Comune=‘Roma’(Cliente)
Rossi C1 Roma
Bianchi C3 Roma
Verdi C4 Roma
SelezioneCliente Nome CodC Comune
Rossi C1 Roma
Rossi C2 Milano
Bianchi C3 Roma
Verdi C4 Roma
Query: Dati dei clientiche si chiamano Rossie risiedono a Roma
Comune=‘Roma’Nome=‘Rossi’(Cliente)Rossi 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 ))
-join
• Consente di selezionare le tuple del prodotto cartesiano dei due operandi che soddisfano una condizione del Tipo
AB 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 = AB (r1 x r2 )AB
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 naturaleCliente Nome CodC Comune
Rossi C1 Roma
Rossi C2 Milano
Bianchi C3 Roma
Verdi C4 Roma
Ordine CodC CodA 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 CodC Comune CodA 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
Cliente Nome CodC Comune
Rossi C1 Roma
Rossi C2 Milano
Bianchi C3 Roma
Verdi C4 Roma
Ordine CodC CodA N-pezzi
C1 A1 100
C2 A2 200
C3 A2 150
C4 A3 200
C1 A2 200
C1 A3 100
Query : Nomi dei clienti che hanno ordinato più di 100 pezzi per almeno un articolo
NomeN-pezzi>100Cliente Ordine
Esempio 1Cliente Ordine
Nome CodC Comune CodA 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>100Cliente Ordine
Nome CodC Comune CodA N-pezzi
Rossi C1 Roma A2 200
Rossi C2 Milano A2 200
Bianchi C3 Roma A2 150
Verdi C4 Roma A3 200
Esempio 1 NomeN-pezzi>100Cliente Ordine
Nome
Rossi
Bianchi
Verdi
Esempio 2Cliente Nome CodC Comune
Rossi C1 Roma
Rossi C2 Milano
Bianchi C3 Roma
Verdi C4 Roma
Ordine CodC CodA N-pezzi
C1 A1 100
C2 A2 200
C3 A2 150
C4 A3 200
C1 A2 200
C1 A3 100
Articolo CodA Tipo Prezzo
A1 Piatto 3
A2 Bicchiere 2
A3 Tazza 4
Nome e Comune dei clienti che hanno ordinato più di 100 pezzi per almeno un
articolo con prezzo superiore a 2
Nome,ComuneN-pezzi>100Prezzo>2(Cliente Ordine Articolo)
Esempio 2(Cliente Ordine Articolo
Nome CodC Comune CodA N-pezzi Tipo 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
Nome CodC Comune CodA N-pezzi Tipo Prezzo
Verdi C4 Roma A3 200 Tazza 4
N-pezzi>100Prezzo>2(Cliente Ordine Articolo)
Esempio 2
Nome Comune
Verdi Roma
Nome,ComuneN-pezzi>100Prezzo>2(Cliente Ordine Articolo)
Esempio 2Cliente Nome CodC Comune
Rossi C1 Roma
Rossi C2 Milano
Bianchi C3 Roma
Verdi C4 Roma
Ordine CodC CodA N-pezzi
C1 A1 100
C2 A2 200
C3 A2 150
C4 A3 200
C1 A2 200
C1 A3 100
Articolo CodA Tipo Prezzo
A1 Piatto 3
A2 Bicchiere 2
A3 Tazza 4
Nome e Comune dei clienti che hanno ordinato più di 100 pezzi per almeno un
articolo con prezzo superiore a 2
Nome,Comune ((Cliente N-pezzi>100(Ordine))
Prezzo>2 (CodA,Prezzo(Articolo)))
Esempio 2
CodC CodA N-pezzi
C2 A2 200
C3 A2 150
C4 A3 200
C1 A2 200
N-pezzi>100(Ordine)
Nome,Comune ((Cliente N-pezzi>100(Ordine))
Prezzo>2 (CodA,Prezzo(Articolo)))
Esempio 2
Cliente N-pezzi>100(Ordine)
Nome CodC Comune CodA N-pezzi
Rossi C1 Roma A2 200
Rossi C2 Milano A2 200
Bianchi C3 Roma A2 150
Verdi C4 Roma A3 200
Nome,Comune ((Cliente N-pezzi>100(Ordine))
Prezzo>2 (CodA,Prezzo(Articolo)))
Esempio 2
CodA Prezzo
A1 3
A2 2
A3 4
CodA,Prezzo(Articolo)
Nome,Comune ((Cliente N-pezzi>100(Ordine))
Prezzo>2 (CodA,Prezzo(Articolo)))
Esempio 2
CodA Prezzo
A1 3
A3 4
Prezzo>2 (CodA,Prezzo(Articolo))
Nome,Comune ((Cliente N-pezzi>100(Ordine))
Prezzo>2 (CodA,Prezzo(Articolo)))
Esempio 2
Nome CodC Comune CodA N-pezzi Prezzo
Verdi C4 Roma A3 200 4
Nome,Comune ((Cliente N-pezzi>100(Ordine))
Prezzo>2 (CodA,Prezzo(Articolo)))
(Cliente N-pezzi>100(Ordine)) Prezzo>2 (CodA,Prezzo(Articolo))
Esempio 2
Nome Comune
Verdi Roma
Nome,Comune ((Cliente N-pezzi>100(Ordine))
Prezzo>2(CodA,Prezzo(Articolo)))