Pamela Serena Nerattini, Consulente LinkedIn e HR – “Ascoltare per crescere i...
Esercitazioni 01 Algebra Relazionale
1. Corso di Basi di Dati e Laboratorio
Esercitazione di algebra
relazionale
Alfio Ferrara - Stefano Montanelli
A.A. 2005/2006 Basi di Dati e Laboratorio 1
Simbologia
SELEZIONE σ< condizione >(R)
PROIEZIONE Π< attributi >(R)
THETA JOIN R1 < condizione >R2
EQUIJOIN R1 < condizione ‘=‘ >R2
JOIN NATURALE R1 * R2
A.A. 2005/2006 Basi di Dati e Laboratorio 2
Simbologia
UNIONE R1 ∪ R2
INTERSEZIONE R1 ∩ R2
DIFFERENZA R1 – R2
PRODOTTO
R1 × R2
CARTESIANO
R1(Z) ÷ R2(Y)
DIVISIONE
con Z = X ∪ Y
A.A. 2005/2006 Basi di Dati e Laboratorio 3
1
2. Schema relazionale
• Schema relazionale
– CLIENTE (codice, nome, indirizzo, sconto)
– ACQUISTO (codice, codnegozio, nomep,
data, luogo)
– PRODOTTO (nomep, tipo, produttore, costo)
A.A. 2005/2006 Basi di Dati e Laboratorio 4
Schema relazionale
CODICE NOME INDIRIZZO SCONTO
K1 Rossi Roma no
CLIENTE K2 Bianchi Milano yes
K3 Verdi Palermo yes
K4 Neri Cagliari no
CODICE CODNEGOZIO NOMEP DATA LUOGO
K1 N1 H-Match 22/10/2002 Pavia
ACQUISTO K3 N7 GMS 03/04/2001 Torino
K2 N6 GMS 05/04/2003 Milano
K2 N4 OpenOffice 28/04/2004 Milano
NOMEP TIPO PRODUTTORE COSTO
H-Match SW ISLab 6000
PRODOTTO GMS Gestionale baLSI 2500
Oracle DBMS Oracle 1020
OpenOffice OA OO.org 0
A.A. 2005/2006 Basi di Dati e Laboratorio 5
Interrogazione 1
–CLIENTE (codice, nome, indirizzo, sconto)
–ACQUISTO (codice, codnegozio, nomep, data, luogo)
–PRODOTTO (nomep, tipo, produttore, costo)
– Formulare in algebra relazionale ottimizzata la
seguente interrogazione:
– Determinare codice e nome dei clienti
che hanno acquistato prodotti gestionali
in Milano
A.A. 2005/2006 Basi di Dati e Laboratorio 6
2
3. Soluzione 1
–CLIENTE (codice, nome, indirizzo, sconto)
–ACQUISTO (codice, codnegozio, nomep, data, luogo)
–PRODOTTO (nomep, tipo, produttore, costo)
Determinare codice e nome dei clienti che hanno
acquistato prodotti gestionali in Milano
(Πcodice,nome(CLIENTE)) *
(Πcodice((Πcodice,nomep(σluogo=‘Milano’(ACQUISTO))) *
(Πnomep(σtipo=‘gestionale’(PRODOTTO)))))
A.A. 2005/2006 Basi di Dati e Laboratorio 7
Soluzione 1
CODICE NOME INDIRIZZO SCONTO
K1 Rossi Roma no
K2 Bianchi Milano yes
K3 Verdi Palermo yes
K4 Neri Cagliari no
CODICE CODNEGOZIO NOMEP DATA LUOGO
K1 N1 H-Match 22/10/2002 Pavia
K3 N7 GMS 03/04/2001 Torino
K2 N6 GMS 05/04/2003 Milano
K2 N4 OpenOffice 28/04/2004 Milano
NOMEP TIPO PRODUTTORE COSTO
H-Match SW ISLab 6000
GMS Gestionale baLSI 2500
Oracle DBMS Oracle 1020
OpenOffice OA OO.org 0
A.A. 2005/2006 Basi di Dati e Laboratorio 8
Interrogazione 2
–CLIENTE (codice, nome, indirizzo, sconto)
–ACQUISTO (codice, codnegozio, nomep, data, luogo)
–PRODOTTO (nomep, tipo, produttore, costo)
– Formulare in algebra relazionale ottimizzata la
seguente interrogazione:
– Determinare i codici dei clienti con sconto
che hanno acquistato
prodotti gestionali e prodotti
di office automation
A.A. 2005/2006 Basi di Dati e Laboratorio 9
3
4. Soluzione 2
–CLIENTE (codice, nome, indirizzo, sconto)
–ACQUISTO (codice, codnegozio, nomep, data, luogo)
–PRODOTTO (nomep, tipo, produttore, costo)
Determinare i codici dei clienti con sconto che hanno
acquistato prodotti gestionali e prodotti
di office automation
(Πcodice(σsconto=‘yes’ (CLIENTE))) *
(Πcodice((Πcodice,nomep(ACQUISTO)) *
(Πnomep(σtipo=‘gestionale’(PRODOTTO)))))
∩
(Πcodice(σsconto=‘yes’ (CLIENTE))) *
(Πcodice((Πcodice,nomep(ACQUISTO)) *
(Πnomep(σtipo=‘OA’(PRODOTTO)))))
A.A. 2005/2006 Basi di Dati e Laboratorio 10
Soluzione 2
CODICE NOME INDIRIZZO SCONTO
K1 Rossi Roma no
K2 Bianchi Milano yes
K3 Verdi Palermo yes
K4 Neri Cagliari no
CODICE CODNEGOZIO NOMEP DATA LUOGO
K1 N1 H-Match 22/10/2002 Pavia
K3 N7 GMS 03/04/2001 Torino
K2 N6 GMS 05/04/2003 Milano
K2 N4 OpenOffice 28/04/2004 Milano
NOMEP TIPO PRODUTTORE COSTO
H-Match SW ISLab 6000
GMS Gestionale baLSI 2500
Oracle DBMS Oracle 1020
OpenOffice OA OO.org 0
A.A. 2005/2006 Basi di Dati e Laboratorio 11
Interrogazione 3
–CLIENTE (codice, nome, indirizzo, sconto)
–ACQUISTO (codice, codnegozio, nomep, data, luogo)
–PRODOTTO (nomep, tipo, produttore, costo)
– Formulare in algebra relazionale ottimizzata la
seguente interrogazione:
– Determinare il nome dei prodotti
acquistati da tutti i clienti con sconto
A.A. 2005/2006 Basi di Dati e Laboratorio 12
4
5. Soluzione 3
–CLIENTE (codice, nome, indirizzo, sconto)
–ACQUISTO (codice, codnegozio, nomep, data, luogo)
–PRODOTTO (nomep, tipo, produttore, costo)
Determinare il nome dei prodotti acquistati da tutti i
clienti con sconto
((Πcodice,nomep(ACQUISTO)) ÷
(Πcodice(σsconto=‘yes’ (CLIENTE))))
A.A. 2005/2006 Basi di Dati e Laboratorio 13
Soluzione 3
CODICE NOME INDIRIZZO SCONTO
K1 Rossi Roma no
K2 Bianchi Milano yes
K3 Verdi Palermo yes
K4 Neri Cagliari no
CODICE CODNEGOZIO NOMEP DATA LUOGO
K1 N1 H-Match 22/10/2002 Pavia
K3 N7 GMS 03/04/2001 Torino
K2 N6 GMS 05/04/2003 Milano
K2 N4 OpenOffice 28/04/2004 Milano
NOMEP TIPO PRODUTTORE COSTO
H-Match SW ISLab 6000
GMS Gestionale baLSI 2500
Oracle DBMS Oracle 1020
OpenOffice OA OO.org 0
A.A. 2005/2006 Basi di Dati e Laboratorio 14
Schema relazionale
• Schema relazionale
– FORNITORE(PIVA, Nominativo, CittaF, Email)
– CLIENTE(Matricola, Nome, CittaC)
– FORNITURA(Fornitore, Cliente, CodProdotto,
Data, Quantita)
A.A. 2005/2006 Basi di Dati e Laboratorio 15
5
6. Schema relazionale
PIVA NOMINATIVO CITTAF EMAIL
128943 Montanelli Bergamo mon@is.lab
FORNITORE 878737 Ferrara Milano af@is.lab
564725 Flint London fl@is.lab
432561 Neri Milano NULL
MATRICOLA NOME CITTAC
C1 Rossi Milano
CLIENTE C2 Neri Roma
C3 Bianchi Taranto
C4 Verdi Ginevra
FORNITURA
FORNITORE CLIENTE CODPRODOTTO DATA QUANTITA
128943 C3 P1 22/04/2004 6780
564725 C4 P1 28/04/2004 2500
878737 C1 P5 11/09/2001 1000
564725 C1 P6 12/08/1999 40
A.A. 2005/2006 Basi di Dati e Laboratorio 16
Ridenominazione
• Operatore che cambia il nome degli
attributi (contenuto delle relazioni
inalterato)
ρNuovoNome ← Nome (R)
Paternità Maternità
PADRE FIGLIO MADRE FIGLIO
Adamo Caino Eva Caino
Adamo Abele Eva Abele
Abramo Isacco Sara Isacco
Abramo Israele Agar Israele
ρGenitore ← Padre (Paternità) ∪ ρGenitore ← Madre (Maternità)
A.A. 2005/2006 Basi di Dati e Laboratorio 17
Interrogazione 1
– FORNITORE(PIVA, Nominativo, CittaF, Email)
– CLIENTE(Matricola, Nome, CittaC)
– FORNITURA(Fornitore, Cliente, CodProdotto, Data, Quantita)
– Formulare in algebra relazionale ottimizzata la
seguente interrogazione:
– Trovare matricola e nome dei clienti che
hanno ricevuto forniture da fornitori
milanesi
A.A. 2005/2006 Basi di Dati e Laboratorio 18
6
7. Soluzione 1
– FORNITORE(PIVA, Nominativo, CittaF, Email)
– CLIENTE(Matricola, Nome, CittaC)
– FORNITURA(Fornitore, Cliente, CodProdotto, Data, Quantita)
Trovare matricola e nome dei clienti che
hanno ricevuto forniture da fornitori milanesi
Πmatricola,nome((Πmatricola,nome (CLIENTE)) Matricola=Cliente
(ΠCliente((ΠCliente,Fornitore(FORNITURA)) Fornitore=PIVA
(ΠPIVA(σCittaF=‘Milano’(FORNITORE))))))
A.A. 2005/2006 Basi di Dati e Laboratorio 19
Soluzione 1
PIVA NOMINATIVO CITTAF EMAIL
128943 Montanelli Bergamo mon@is.lab
878737 Ferrara Milano af@is.lab
564725 Flint London fl@is.lab
432561 Neri Milano NULL
MATRICOLA NOME CITTAC
C1 Rossi Milano
C2 Neri Roma
C3 Bianchi Taranto
C4 Verdi Ginevra
FORNITORE CLIENTE CODPRODOTTO DATA QUANTITA
128943 C3 P1 22/04/2004 6780
564725 C4 P1 28/04/2004 2500
878737 C1 P5 11/09/2001 1000
564725 C1 P6 12/08/1999 40
A.A. 2005/2006 Basi di Dati e Laboratorio 20
Interrogazione 2
– FORNITORE(PIVA, Nominativo, CittaF, Email)
– CLIENTE(Matricola, Nome, CittaC)
– FORNITURA(Fornitore, Cliente, CodProdotto, Data, Quantita)
– Formulare in algebra relazionale ottimizzata la
seguente interrogazione:
– Trovare le città in cui risiedono sia
clienti che fornitori
A.A. 2005/2006 Basi di Dati e Laboratorio 21
7
8. Soluzione 2
– FORNITORE(PIVA, Nominativo, CittaF, Email)
– CLIENTE(Matricola, Nome, CittaC)
– FORNITURA(Fornitore, Cliente, CodProdotto, Data, Quantita)
Trovare le città in cui risiedono sia clienti che fornitori
((ρCitta←CittaC(ΠCittaC (CLIENTE)))
∩
(ρCitta←CittaF (ΠCittaF (FORNITORE))))
A.A. 2005/2006 Basi di Dati e Laboratorio 22
Soluzione 2
PIVA NOMINATIVO CITTAF EMAIL
128943 Montanelli Bergamo mon@is.lab
878737 Ferrara Milano af@is.lab
564725 Flint London fl@is.lab
432561 Neri Milano NULL
MATRICOLA NOME CITTAC
C1 Rossi Milano
C2 Neri Roma
C3 Bianchi Taranto
C4 Verdi Ginevra
FORNITORE CLIENTE CODPRODOTTO DATA QUANTITA
128943 C3 P1 22/04/2004 6780
564725 C4 P1 28/04/2004 2500
878737 C1 P5 11/09/2001 1000
564725 C1 P6 12/08/1999 40
A.A. 2005/2006 Basi di Dati e Laboratorio 23
Interrogazione 3
– FORNITORE(PIVA, Nominativo, CittaF, Email)
– CLIENTE(Matricola, Nome, CittaC)
– FORNITURA(Fornitore, Cliente, CodProdotto, Data, Quantita)
– Formulare in algebra relazionale ottimizzata la
seguente interrogazione:
– Trovare il nome del fornitore che ha
effettuato forniture a tutti i clienti
A.A. 2005/2006 Basi di Dati e Laboratorio 24
8
9. Soluzione 3
– FORNITORE(PIVA, Nominativo, CittaF, Email)
– CLIENTE(Matricola, Nome, CittaC)
– FORNITURA(Fornitore, Cliente, CodProdotto, Data, Quantita)
Trovare il nome del fornitore che ha effettuato
forniture a tutti i clienti
ΠNominativo((ΠPIVA,Nominativo(FORNITORE)) PIVA=Fornitore
((ΠCliente,Fornitore(FORNITURA)) ÷
(ρCliente←Matricola(ΠMatricola(CLIENTE)))))
A.A. 2005/2006 Basi di Dati e Laboratorio 25
Soluzione 3
PIVA NOMINATIVO CITTAF EMAIL
128943 Montanelli Bergamo mon@is.lab
878737 Ferrara Milano af@is.lab
564725 Flint London fl@is.lab
432561 Neri Milano NULL
MATRICOLA NOME CITTAC
C1 Rossi Milano
C2 Neri Roma
C3 Bianchi Taranto
C4 Verdi Ginevra
FORNITORE CLIENTE CODPRODOTTO DATA QUANTITA
128943 C3 P1 22/04/2004 6780
564725 C4 P1 28/04/2004 2500
878737 C1 P5 11/09/2001 1000
564725 C1 P6 12/08/1999 40
A.A. 2005/2006 Basi di Dati e Laboratorio 26
9