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: 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)) 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 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 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 NomeN-pezzi>100Cliente 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>100Cliente 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 NomeN-pezzi>100Cliente 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>100Prezzo>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>100Prezzo>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>100Prezzo>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