Interrogazione di una base di dati relazionale Algebra relazionale.

Post on 01-May-2015

217 views 0 download

Transcript of Interrogazione di una base di dati relazionale Algebra relazionale.

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)))