Esercitazioni 03 Algebra + S Q L

9
1 A.A. 2005/2006 Basi di Dati e Laboratorio 1 Corso di Basi di Dati e Laboratorio Esercitazione di algebra relazionale e SQL Alfio Ferrara - Stefano Montanelli A.A. 2005/2006 Basi di Dati e Laboratorio 2 Simbologia R 1 * R 2 JOIN NATURALE R 1 < condizione ‘=‘ > R 2 EQUIJOIN R 1 < condizione > R 2 THETA JOIN Π < attributi > (R) PROIEZIONE σ < condizione > (R) SELEZIONE A.A. 2005/2006 Basi di Dati e Laboratorio 3 Simbologia R 1 (Z) ÷ R 2 (Y) con Z = X Y DIVISIONE R 1 × R 2 PRODOTTO CARTESIANO R 1 –R 2 DIFFERENZA R 1 R 2 INTERSEZIONE R 1 R 2 UNIONE

Transcript of Esercitazioni 03 Algebra + S Q L

Page 1: Esercitazioni 03  Algebra +  S Q L

1

A.A. 2005/2006 Basi di Dati e Laboratorio 1

Corso di Basi di Dati e Laboratorio

Esercitazione di algebra relazionale e SQLAlfio Ferrara - Stefano Montanelli

A.A. 2005/2006 Basi di Dati e Laboratorio 2

Simbologia

R1 * R2JOIN NATURALE

R1 < condizione ‘=‘ >R2EQUIJOIN

R1 < condizione >R2THETA JOIN

Π< attributi >(R)PROIEZIONE

σ< condizione >(R)SELEZIONE

A.A. 2005/2006 Basi di Dati e Laboratorio 3

Simbologia

R1(Z) ÷ R2(Y)con Z = X ∪ Y

DIVISIONE

R1 × R2PRODOTTOCARTESIANO

R1 – R2DIFFERENZA

R1 ∩ R2INTERSEZIONE

R1 ∪ R2UNIONE

Page 2: Esercitazioni 03  Algebra +  S Q L

2

A.A. 2005/2006 Basi di Dati e Laboratorio 4

Schema relazionale

• Schema relazionale

– CENTRO(NomeC, Regione, Area(N/C/S),Abitanti)

– FIUME(NomeF, Lunghezza)– ATTRAVERSAMENTI(NomeC, Fiume)

A.A. 2005/2006 Basi di Dati e Laboratorio 5

ATTRAVERSAMENTI

55.000Arno70.000Tevere100.000Ticino

1.000.000PoLUNGHEZZANOMEF

Schema relazionaleCENTRO

FIUME

500.000CToscanaFirenze110.000CToscanaPisa

1.000.000SCampaniaNapoli90.000NLombardiaPavia

900.000NPiemonteTorino120.000NLombardiaMantova

ABITANTIAREAREGIONENOMEC

ArnoFirenzeArnoPisaTicinoPavia

PoMantovaPoTorino

FIUMENOMEC

A.A. 2005/2006 Basi di Dati e Laboratorio 6

Domanda 1

– Formulare in algebra relazionale ottimizzatala seguente interrogazione:

– Trovare nome e lunghezza dei fiumi che attraversano centri del nord con più di 100000 abitanti

– CENTRO(NomeC, Regione, Area(N/C/S), Abitanti)– FIUME(NomeF, Lunghezza)– ATTRAVERSAMENTI( NomeC, Fiume)

Page 3: Esercitazioni 03  Algebra +  S Q L

3

A.A. 2005/2006 Basi di Dati e Laboratorio 7

Soluzione 1

Trovare nome e lunghezza dei fiumi che attraversano centri del nord con più di 100000 abitanti

– CENTRO(NomeC, Regione, Area(N/C/S), Abitanti)– FIUME(NomeF, Lunghezza)– ATTRAVERSAMENTI( NomeC, Fiume)

ΠNomeF,Lunghezza ((FIUME) NomeF=Fiume

(ΠFiume ((ATTRAVERSAMENTI) *

(ΠNomeC (σAbitanti>100000 (σArea=‘N’ (CENTRO)))))))

A.A. 2005/2006 Basi di Dati e Laboratorio 8

55.000Arno70.000Tevere100.000Ticino

1.000.000PoLUNGHEZZANOMEF

Soluzione 1

500.000CToscanaFirenze110.000CToscanaPisa

1.000.000SCampaniaNapoli110.000NLombardiaPavia

900.000NPiemonteTorino90.000NLombardiaMantova

ABITANTIAREAREGIONENOMEC

ArnoFirenzeArnoPisaTicinoPavia

PoMantovaPoTorino

FIUMENOMEC

A.A. 2005/2006 Basi di Dati e Laboratorio 9

Domanda 2

– Formulare in algebra relazionale ottimizzatala seguente interrogazione:

– Trovare nome e lunghezza dei fiumi che attraversano sia centri del Piemonte che della Lombardia

– CENTRO(NomeC, Regione, Area(N/C/S), Abitanti)– FIUME(NomeF, Lunghezza)– ATTRAVERSAMENTI( NomeC, Fiume)

Page 4: Esercitazioni 03  Algebra +  S Q L

4

A.A. 2005/2006 Basi di Dati e Laboratorio 10

ΠNomeF,Lunghezza ((FIUME) NomeF=Fiume

((ΠFiume ((ATTRAVERSAMENTI) *

(ΠNomeC (σRegione=‘Piemonte’ (CENTRO)))))

(ΠFiume ((ATTRAVERSAMENTI) *

(ΠNomeC (σRegione=‘Lombardia’ (CENTRO)))))))

Soluzione 2

Trovare nome e lunghezza dei fiumi che attraversano sia centri del Piemonte che della Lombardia

A.A. 2005/2006 Basi di Dati e Laboratorio 11

ArnoFirenzeArnoPisaTicinoPavia

PoMantovaPoTorino

FIUMENOMEC

Soluzione 2

55.000Arno70.000Tevere100.000Ticino

1.000.000PoLUNGHEZZANOMEF

500.000CToscanaFirenze110.000CToscanaPisa

1.000.000SCampaniaNapoli90.000NLombardiaPavia

900.000NPiemonteTorino120.000NLombardiaMantova

ABITANTIAREAREGIONENOMEC

A.A. 2005/2006 Basi di Dati e Laboratorio 12

Domanda 3

– Formulare in algebra relazionale ottimizzatala seguente interrogazione:

– Trovare il nome dei fiumi che non attraversano centri del sud

– CENTRO(NomeC, Regione, Area(N/C/S), Abitanti)– FIUME(NomeF, Lunghezza)– ATTRAVERSAMENTI( NomeC, Fiume)

Page 5: Esercitazioni 03  Algebra +  S Q L

5

A.A. 2005/2006 Basi di Dati e Laboratorio 13

Soluzione 3

Trovare il nome fiumi che non attraversano centri del sud

– CENTRO(NomeC, Regione, Area(N/C/S), Abitanti)– FIUME(NomeF, Lunghezza)– ATTRAVERSAMENTI( NomeC, Fiume)

((ΠNomeF (FIUME))

-

(ΠFiume((ΠNomeC(σArea=‘S’ (CENTRO))) *

(ATTRAVERSAMENTI))))

A.A. 2005/2006 Basi di Dati e Laboratorio 14

55.000Arno

70.000Tevere100.000Ticino

1.000.000PoLUNGHEZZANOMEF

ArnoFirenzeArnoPisaTicinoPavia

PoMantovaPoTorino

FIUMENOMEC

Soluzione 3

500.000CToscanaFirenze110.000CToscanaPisa

1.000.000SCampaniaNapoli90.000NLombardiaPavia

900.000NPiemonteTorino120.000NLombardiaMantova

ABITANTIAREAREGIONENOMEC

A.A. 2005/2006 Basi di Dati e Laboratorio 15

Domanda 4

– Formulare in algebra relazionale ottimizzatala seguente interrogazione:

– Trovare il nome dei fiumi che attraversano tutte le città del centro

– CENTRO(NomeC, Regione, Area(N/C/S), Abitanti)– FIUME(NomeF, Lunghezza)– ATTRAVERSAMENTI( NomeC, Fiume)

Page 6: Esercitazioni 03  Algebra +  S Q L

6

A.A. 2005/2006 Basi di Dati e Laboratorio 16

Soluzione 4

Trovare il nome dei fiumi che attraversano tutte le cittàdel centro

– CENTRO(NomeC, Regione, Area(N/C/S), Abitanti)– FIUME(NomeF, Lunghezza)– ATTRAVERSAMENTI( NomeC, Fiume)

(ATTRAVERSAMENTI) ÷

(ΠNomeC(σArea=‘C’ (CENTRO)))

A.A. 2005/2006 Basi di Dati e Laboratorio 17

Soluzione 4

55.000Arno70.000Tevere100.000Ticino

1.000.000PoLUNGHEZZANOMEF

500.000CToscanaFirenze110.000CToscanaPisa

1.000.000SCampaniaNapoli90.000NLombardiaPavia

900.000NPiemonteTorino120.000NLombardiaMantova

ABITANTIAREAREGIONENOMEC

ArnoFirenzeArnoPisaTicinoPavia

PoMantovaPoTorino

FIUMENOMEC

A.A. 2005/2006 Basi di Dati e Laboratorio 18

Schema Relazionale

– RUOLO(id, nome, descrizione)– GRUPPO(id, nome, finanziamento)– PERSONA(id, nome, cognome, ruolo)– APPARTENENZA(id_persona, id_gruppo)

Page 7: Esercitazioni 03  Algebra +  S Q L

7

A.A. 2005/2006 Basi di Dati e Laboratorio 19

Query 1

Formulare in SQL la seguente interrogazione:

Determinare nome, cognome delle persone che appartengono solo al gruppo “laboratorio”oppure solo al gruppo “progetto H”

– RUOLO(id, nome, descrizione)– GRUPPO(id, nome, finanziamento)– PERSONA(id, nome, cognome, ruolo)– APPARTENENZA(id_persona, id_gruppo)

A.A. 2005/2006 Basi di Dati e Laboratorio 20

Soluzione query 1

SELECT persona.id, persona.nome, persona.cognome, gruppo.nome AS gruppo

FROM persona, appartenenza, gruppoWHERE ((persona.id=appartenenza.id_persona) AND

(appartenenza.id_gruppo=gruppo.id) AND(gruppo.nome='laboratorio') AND NOT EXISTS(SELECT * FROM persona alias, appartenenza, gruppoWHERE ((persona.id=appartenenza.id_persona) AND

(appartenenza.id_gruppo=gruppo.id) AND (gruppo.nome<>'laboratorio') AND (persona.id=alias.id))))

Estrazione delle persone appartenenti solo al gruppo laboratorio (preparatoria alla query):

A.A. 2005/2006 Basi di Dati e Laboratorio 21

Soluzione query 1SELECT persona.id, persona.nome, persona.cognome,

gruppo.nome AS gruppoFROM persona, appartenenza, gruppoWHERE ((persona.id=appartenenza.id_persona) AND(appartenenza.id_gruppo=gruppo.id) AND (gruppo.nome='laboratorio') AND NOT EXISTS (SELECT * FROM persona alias, appartenenza, gruppo

WHERE ((persona.id=appartenenza.id_persona) AND (appartenenza.id_gruppo=gruppo.id) AND (gruppo.nome<>'laboratorio') AND (persona.id=alias.id))))

UNIONSELECT persona.id, persona.nome, persona.cognome,

gruppo.nome AS gruppoFROM persona, appartenenza, gruppoWHERE ((persona.id=appartenenza.id_persona) AND(appartenenza.id_gruppo=gruppo.id) AND (gruppo.nome=‘progetto H') AND NOT EXISTS (SELECT * FROM persona alias, appartenenza, gruppo

WHERE ((persona.id=appartenenza.id_persona) AND (appartenenza.id_gruppo=gruppo.id) AND (gruppo.nome<>' progetto H') AND (persona.id=alias.id))))

Page 8: Esercitazioni 03  Algebra +  S Q L

8

A.A. 2005/2006 Basi di Dati e Laboratorio 22

Query 2

Formulare in SQL la seguente interrogazione:

Determinare ordinandoli alfabeticamente identificatore, nome, cognome delle persone che appartengono ad almeno due gruppi

– RUOLO(id, nome, descrizione)– GRUPPO(id, nome, finanziamento)– PERSONA(id, nome, cognome, ruolo)– APPARTENENZA(id_persona, id_gruppo)

A.A. 2005/2006 Basi di Dati e Laboratorio 23

Soluzione query 2

SELECT persona.id, persona.nome, persona.cognome, COUNT(*) AS Numerogruppi

FROM persona, appartenenza WHERE persona.id = appartenenza.id_persona GROUP BY persona.id, persona.nome, persona.cognome HAVING COUNT(*) > 1 ORDER BY persona.cognome, persona.nome

Determinare, ordinandoli alfabeticamente, identificatore, nome, cognome delle persone che appartengono ad almeno due gruppi

– RUOLO(id, nome, descrizione)– GRUPPO(id, nome, finanziamento)– PERSONA(id, nome, cognome, ruolo)– APPARTENENZA(id_persona, id_gruppo)

A.A. 2005/2006 Basi di Dati e Laboratorio 24

Query 3

Formulare in SQL la seguente interrogazione:

Determinare identificatore, nome, cognome della persona che appartiene al maggior numero di gruppi

– RUOLO(id, nome, descrizione)– GRUPPO(id, nome, finanziamento)– PERSONA(id, nome, cognome, ruolo)– APPARTENENZA(id_persona, id_gruppo)

Page 9: Esercitazioni 03  Algebra +  S Q L

9

A.A. 2005/2006 Basi di Dati e Laboratorio 25

Soluzione query 3

SELECT DISTINCT persona.id, persona.nome, persona.cognome, COUNT(*) AS Numerogruppi

FROM persona, appartenenza WHERE persona.id = appartenenza.id_persona GROUP BY persona.id, persona.nome, persona.cognome HAVING (COUNT(*) >= ALL (SELECT COUNT(*)

FROM persona, appartenenza WHERE persona.id = appartenenza.id_persona GROUP BY persona.id))

Determinare identificatore, nome, cognome della persona che appartiene al maggior numero di gruppi

– RUOLO(id, nome, descrizione)– GRUPPO(id, nome, finanziamento)– PERSONA(id, nome, cognome, ruolo)– APPARTENENZA(id_persona, id_gruppo)