Basi di Dati: Corso di laboratorio - Lezione 4Join Esterno Completo in SQL Example (Join completo...

27
Join di Tabelle Algebra Insiemistica su Tabelle Sommario e Bibliografia Basi di Dati: Corso di laboratorio Lezione 4 Raffaella Gentilini 1 / 27

Transcript of Basi di Dati: Corso di laboratorio - Lezione 4Join Esterno Completo in SQL Example (Join completo...

Page 1: Basi di Dati: Corso di laboratorio - Lezione 4Join Esterno Completo in SQL Example (Join completo insegnante e corso) Iljoin esterno completodelle tabelle insegnante e corso: permette

Join di TabelleAlgebra Insiemistica su Tabelle

Sommario e Bibliografia

Basi di Dati:Corso di laboratorio

Lezione 4

Raffaella Gentilini

1 / 27

Page 2: Basi di Dati: Corso di laboratorio - Lezione 4Join Esterno Completo in SQL Example (Join completo insegnante e corso) Iljoin esterno completodelle tabelle insegnante e corso: permette

Join di TabelleAlgebra Insiemistica su Tabelle

Sommario e Bibliografia

Sommario

1 Join di TabelleJoin NaturaleTheta JoinJoin Esterno

2 Algebra Insiemistica su Tabelle

3 Sommario e Bibliografia

2 / 27

Page 3: Basi di Dati: Corso di laboratorio - Lezione 4Join Esterno Completo in SQL Example (Join completo insegnante e corso) Iljoin esterno completodelle tabelle insegnante e corso: permette

Join di TabelleAlgebra Insiemistica su Tabelle

Sommario e Bibliografia

Join NaturaleTheta JoinJoin Esterno

Lo Statement JOIN

Join espliciti di tabelle nella clausola FROM

In SQL e’ possibile scrivere operazioni esplicite di join nellaclausola FROM del comando SELECT, mediante lo statementJOIN

si possono specificare esplicitamente diversi tipi di join:

CROSS JOIN

INNER JOIN

LEFT OUTER JOIN

RIGHT OUTER JOIN

FULL OUTER JOIN

NATURAL JOIN

3 / 27

Page 4: Basi di Dati: Corso di laboratorio - Lezione 4Join Esterno Completo in SQL Example (Join completo insegnante e corso) Iljoin esterno completodelle tabelle insegnante e corso: permette

Join di TabelleAlgebra Insiemistica su Tabelle

Sommario e Bibliografia

Join NaturaleTheta JoinJoin Esterno

Join Naturale

In algebra relazionale, il join naturale e’ un operatore che collegadati in relazioni diverse, sulla base di valori uguali in attributi con lostesso nome

Il join naturale R1 ./ R2 puo’ essere introdotto esplicitamente nellaclausola FROM del comando SELECT utilizzando

1 il costrutto NATURAL [INNER] JOIN:

SELECT ∗ FROM R1 NATURAL [INNER] JOIN R2

2 il costrutto [INNER] JOIN + USING:

SELECT ∗ FROM R1 [INNER] JOIN R2 USING <attributi>

Lo statement USING permette di eliminare le colonne duplicatenel risultato

4 / 27

Page 5: Basi di Dati: Corso di laboratorio - Lezione 4Join Esterno Completo in SQL Example (Join completo insegnante e corso) Iljoin esterno completodelle tabelle insegnante e corso: permette

Join di TabelleAlgebra Insiemistica su Tabelle

Sommario e Bibliografia

Join NaturaleTheta JoinJoin Esterno

Esempio (I)

Si considerino le tabelle insegnante e corso illustrate di seguito:

id insegnante cognome nome

3 Donato Rocco2 Bella Donatella7 Pupo Pino

10 Moreno Mario

id corso id insegnante titolo

1 3 ’Circuiti’2 2 ’Programmazione’3 ’Algoritmi’

10 ’Logica’

5 / 27

Page 6: Basi di Dati: Corso di laboratorio - Lezione 4Join Esterno Completo in SQL Example (Join completo insegnante e corso) Iljoin esterno completodelle tabelle insegnante e corso: permette

Join di TabelleAlgebra Insiemistica su Tabelle

Sommario e Bibliografia

Join NaturaleTheta JoinJoin Esterno

Esempio (II)

Example (join naturale di insegnante e corso)

Il join naturale delle tabelle corso e insegnante si puo’ ottenere usandoindifferentemente uno dei seguenti comandi:

SELECT ∗ FROM insegnate NATURAL JOIN corso;

SELECT ∗ FROM insegnate NATURAL INNER JOIN corso;

SELECT ∗ FROM insegnate JOIN corso USING (id insegnante);

SELECT ∗ FROM insegnate INNER JOIN corso USING

(id insegnante);

e produce il risultato:

id insegnante cognome nome id corso titolo

3 Donato Rocco 1 ’Circuiti’2 Bella Donatella 2 ’Programmazione’

6 / 27

Page 7: Basi di Dati: Corso di laboratorio - Lezione 4Join Esterno Completo in SQL Example (Join completo insegnante e corso) Iljoin esterno completodelle tabelle insegnante e corso: permette

Join di TabelleAlgebra Insiemistica su Tabelle

Sommario e Bibliografia

Join NaturaleTheta JoinJoin Esterno

Theta Join

L’operatore dell’algebra relazionale di theta join

R1 ./exp R2 ≡ σexp(R1 × R2)

puo’ essere introdotto esplicitamente nella clausola FROM del comandoSELECT utilizzando:

il costrutto [INNER] JOIN + ON:

SELECT ∗ FROM R1 [INNER] JOIN R2 ON <predicato>

dove <predicato> e’ un’espressione logica (come nella clausola WHERE).

7 / 27

Page 8: Basi di Dati: Corso di laboratorio - Lezione 4Join Esterno Completo in SQL Example (Join completo insegnante e corso) Iljoin esterno completodelle tabelle insegnante e corso: permette

Join di TabelleAlgebra Insiemistica su Tabelle

Sommario e Bibliografia

Join NaturaleTheta JoinJoin Esterno

Esempio

Si considerino le tabelle persona e frequenta illustrate di seguito:

Example

id insegnante cognome nome

3 Donato Rocco2 Bella Donatella7 Pupo Pino

10 Moreno Mario

id corso id insegnante titolo

1 3 ’Circuiti’2 2 ’Programmazione’3 ’Algoritmi’

10 ’Logica’

8 / 27

Page 9: Basi di Dati: Corso di laboratorio - Lezione 4Join Esterno Completo in SQL Example (Join completo insegnante e corso) Iljoin esterno completodelle tabelle insegnante e corso: permette

Join di TabelleAlgebra Insiemistica su Tabelle

Sommario e Bibliografia

Join NaturaleTheta JoinJoin Esterno

Esempio (II)

Example

Selezionare i corsi per cui e’ definito il corrispondente titolare del corso:

utilizzando il costrutto INNER JOIN esplicitamente nella clausolaFROM

SELECT id corso, titoloFROM insegnante INNER JOIN corso

ON insegnante.id insegnante = corso.id insegnante;

oppure, data l’equivalenza R1 ./exp R2 ≡ σexp(R1 × R2)

SELECT id corso, titoloFROM insegnante, corsoWHERE insegnante.id insegnante = corso.id insegnante;

9 / 27

Page 10: Basi di Dati: Corso di laboratorio - Lezione 4Join Esterno Completo in SQL Example (Join completo insegnante e corso) Iljoin esterno completodelle tabelle insegnante e corso: permette

Join di TabelleAlgebra Insiemistica su Tabelle

Sommario e Bibliografia

Join NaturaleTheta JoinJoin Esterno

CROSS JOIN

Il costrutto CROSS JOIN nella clausola FROM

L’operazione di prodotto cartesiano nell’algebra relazionalepuo’ essere vista come un’operazione di theta-join:

R1 × R2 ≡ R1 ./true R2

Le seguenti espressioni sono equivalenti in SQL:

1 SELECT ∗ FROM tabella1, tabella2;2 SELECT ∗ FROM tabella1 CROSS JOIN tabella2;3 SELECT ∗ FROM tabella1 JOIN tabella2 ON TRUE;4 SELECT ∗ FROM tabella1 INNER JOIN tabella2 ON TRUE;

10 / 27

Page 11: Basi di Dati: Corso di laboratorio - Lezione 4Join Esterno Completo in SQL Example (Join completo insegnante e corso) Iljoin esterno completodelle tabelle insegnante e corso: permette

Join di TabelleAlgebra Insiemistica su Tabelle

Sommario e Bibliografia

Join NaturaleTheta JoinJoin Esterno

Join Esterno

Il risultato del join tralascia le tuple di una relazione senzacontroparte nell’altra

Il join esterno prevede che tutte le tuple diano un contributo alrisultato, estendendo con valori nulli le tuple che non hannocontroparte

Il join sinistro estende le tuple del primo operandoIl join destro estende le tuple del secondo operandoIl join completo le estende tutte

11 / 27

Page 12: Basi di Dati: Corso di laboratorio - Lezione 4Join Esterno Completo in SQL Example (Join completo insegnante e corso) Iljoin esterno completodelle tabelle insegnante e corso: permette

Join di TabelleAlgebra Insiemistica su Tabelle

Sommario e Bibliografia

Join NaturaleTheta JoinJoin Esterno

Join Esterno in SQL

In SQL l’operatore di outer join puo’ essere introdottoesplicitamente nella clausola FROM del comando SELECT

utilizzando i costrutti:

{LEFT|RIGHT|FULL}[OUTER]JOIN + ON <predicato>

{LEFT|RIGHT|FULL}[OUTER]JOIN + USING <colonne>

NATURAL{LEFT|RIGHT|FULL}[OUTER]JOIN

12 / 27

Page 13: Basi di Dati: Corso di laboratorio - Lezione 4Join Esterno Completo in SQL Example (Join completo insegnante e corso) Iljoin esterno completodelle tabelle insegnante e corso: permette

Join di TabelleAlgebra Insiemistica su Tabelle

Sommario e Bibliografia

Join NaturaleTheta JoinJoin Esterno

Join Esterno Sinistro in SQL

Si considerino le tabelle insegnante e corso illustrate di seguito:

id insegnante cognome nome

3 Donato Rocco2 Bella Donatella7 Pupo Pino

10 Moreno Mario

id corso id insegnante titolo

1 3 ’Circuiti’2 2 ’Programmazione’3 ’Algoritmi’

10 ’Logica’

13 / 27

Page 14: Basi di Dati: Corso di laboratorio - Lezione 4Join Esterno Completo in SQL Example (Join completo insegnante e corso) Iljoin esterno completodelle tabelle insegnante e corso: permette

Join di TabelleAlgebra Insiemistica su Tabelle

Sommario e Bibliografia

Join NaturaleTheta JoinJoin Esterno

Join Esterno Sinistro in SQL

Example (Join sinistro insegnante e corso)

Il join esterno sinistro delle tabelle insegnante e corso:

permette di preservare nel risultato gli insegnanti che nontengono alcun corso

id insegnante cognome nome id corso titolo

3 Donato Rocco 1 ’Circuiti’2 Bella Donatella 2 ’Programmazione’7 Pupo Pino

10 Moreno Mario

14 / 27

Page 15: Basi di Dati: Corso di laboratorio - Lezione 4Join Esterno Completo in SQL Example (Join completo insegnante e corso) Iljoin esterno completodelle tabelle insegnante e corso: permette

Join di TabelleAlgebra Insiemistica su Tabelle

Sommario e Bibliografia

Join NaturaleTheta JoinJoin Esterno

Join Esterno Sinistro in SQL

Example (Join sinistro insegnante e corso)

puo’ essere realizzato in SQL mediante uno dei seguenti comandi:

SELECT ∗ FROM insegnante NATURAL LEFT JOIN corso;SELECT ∗ FROM insegnante NATURAL LEFT OUTER JOIN corso;SELECT ∗ FROM insegnante LEFT JOIN corso USING

(id insegnante);SELECT ∗ FROM insegnante LEFT OUTER JOIN corso USING

(id insegnante);

15 / 27

Page 16: Basi di Dati: Corso di laboratorio - Lezione 4Join Esterno Completo in SQL Example (Join completo insegnante e corso) Iljoin esterno completodelle tabelle insegnante e corso: permette

Join di TabelleAlgebra Insiemistica su Tabelle

Sommario e Bibliografia

Join NaturaleTheta JoinJoin Esterno

Join Esterno Sinistro in SQL

Example

Se si usa uno dei due comandi:

SELECT ∗ FROM insegnante LEFT JOIN corso

ON insegnante.id insegnante = corso.id corso;

SELECT ∗ FROM insegnante LEFT OUTER JOIN corso

ON insegnante.id insegnante = corso.id corso;

La colonna che mantiene gli id degli insegnanti appare duplicata nelrisultato.

16 / 27

Page 17: Basi di Dati: Corso di laboratorio - Lezione 4Join Esterno Completo in SQL Example (Join completo insegnante e corso) Iljoin esterno completodelle tabelle insegnante e corso: permette

Join di TabelleAlgebra Insiemistica su Tabelle

Sommario e Bibliografia

Join NaturaleTheta JoinJoin Esterno

Join Esterno Destro in SQL

Example (Join destro insegnante e corso)

Il join esterno sinistro delle tabelle insegnante e corso:

permette di preservare nel risultato i corsi per cui non e’ statodesignato alcun titolare del corso

id insegnante cognome nome id corso titolo

3 Donato Rocco 1 ’Circuiti’2 Bella Donatella 2 ’Programmazione’

3 ’Algoritmi’7 ’Logica’

17 / 27

Page 18: Basi di Dati: Corso di laboratorio - Lezione 4Join Esterno Completo in SQL Example (Join completo insegnante e corso) Iljoin esterno completodelle tabelle insegnante e corso: permette

Join di TabelleAlgebra Insiemistica su Tabelle

Sommario e Bibliografia

Join NaturaleTheta JoinJoin Esterno

Join Esterno Destro in SQL

Example (Join destro insegnante e corso)

puo’ essere realizzato in SQL mediante uno dei seguenti comandi:

SELECT ∗ FROM insegnante NATURAL RIGHT JOIN corso;SELECT ∗ FROM insegnante NATURAL RIGHT OUTER JOIN

corso;SELECT ∗ FROM insegnante RIGHT JOIN corso USING

(id insegnante);SELECT ∗ FROM insegnante RIGHT OUTER JOIN corso USING

(id insegnante);

18 / 27

Page 19: Basi di Dati: Corso di laboratorio - Lezione 4Join Esterno Completo in SQL Example (Join completo insegnante e corso) Iljoin esterno completodelle tabelle insegnante e corso: permette

Join di TabelleAlgebra Insiemistica su Tabelle

Sommario e Bibliografia

Join NaturaleTheta JoinJoin Esterno

Join Esterno Completo in SQL

Example (Join completo insegnante e corso)

Il join esterno completo delle tabelle insegnante e corso:

permette di preservare nel risultato gli insegnanti che non tengonoalcun corso ed i corsi non ancora assegnati ad alcun docente.

id insegnante cognome nome id corso titolo

3 Donato Rocco 1 ’Circuiti’2 Bella Donatella 2 ’Programmazione’

3 ’Algoritmi’7 ’Logica’

7 Pupo Pino10 Moreno Mario

19 / 27

Page 20: Basi di Dati: Corso di laboratorio - Lezione 4Join Esterno Completo in SQL Example (Join completo insegnante e corso) Iljoin esterno completodelle tabelle insegnante e corso: permette

Join di TabelleAlgebra Insiemistica su Tabelle

Sommario e Bibliografia

Join NaturaleTheta JoinJoin Esterno

Join Esterno Completo in SQL

Example (Join completo insegnante e corso)

puo’ essere realizzato in SQL mediante uno dei seguenti comandi:

SELECT ∗ FROM insegnante NATURAL FULL JOIN corso;SELECT ∗ FROM insegnante NATURAL FULL OUTER JOIN corso;SELECT ∗ FROM insegnante FULL JOIN corso USING

(id insegnante);SELECT ∗ FROM insegnante FULL OUTER JOIN corso USING

(id insegnante);

20 / 27

Page 21: Basi di Dati: Corso di laboratorio - Lezione 4Join Esterno Completo in SQL Example (Join completo insegnante e corso) Iljoin esterno completodelle tabelle insegnante e corso: permette

Join di TabelleAlgebra Insiemistica su Tabelle

Sommario e Bibliografia

Operazioni insiemistiche su tabelle

L’istruzione SELECT non permette di eseguire unione,intersezione e differenza di tabelle;

Si puo’ pero’ combinare in modo opportuno i risultati di dueistruzioni SELECT utilizzando la clausola:[ { UNION | INTERSECT | EXCEPT [ ALL ]}<richiesta> ]

gli elementi delle SELECT list devono avere tipi compatibili egli stessi nomi se si vogliono colonne con un’intestazionedefinita;

L’ordine degli elementi e’ importante (notazione posizionale);

Il risultato e’ di default privo di duplicati. Per ottenerli occorreaggiungere l’opzione ALL:

21 / 27

Page 22: Basi di Dati: Corso di laboratorio - Lezione 4Join Esterno Completo in SQL Example (Join completo insegnante e corso) Iljoin esterno completodelle tabelle insegnante e corso: permette

Join di TabelleAlgebra Insiemistica su Tabelle

Sommario e Bibliografia

Algebra Insiemistica su Tabelle

Example

Tabella S :

A B

1 a1 a2 a2 b2 c3 b

Tabella R:

C B

1 a1 b2 a2 c3 c4 d

SELECT AFROM RUNION

SELECT CFROM S ;

Il risultato e’:1234

22 / 27

Page 23: Basi di Dati: Corso di laboratorio - Lezione 4Join Esterno Completo in SQL Example (Join completo insegnante e corso) Iljoin esterno completodelle tabelle insegnante e corso: permette

Join di TabelleAlgebra Insiemistica su Tabelle

Sommario e Bibliografia

Algebra Insiemistica su Tabelle

Example

Tabella S :

A B

1 a1 a2 a2 b2 c3 b

Tabella R:

C B

1 a1 b2 a2 c3 c4 d

SELECT AFROM RUNION

SELECT C AS AFROM S ;

Il risultato e’:

A

1234

23 / 27

Page 24: Basi di Dati: Corso di laboratorio - Lezione 4Join Esterno Completo in SQL Example (Join completo insegnante e corso) Iljoin esterno completodelle tabelle insegnante e corso: permette

Join di TabelleAlgebra Insiemistica su Tabelle

Sommario e Bibliografia

Algebra Insiemistica su Tabelle

Example

Tabella S :

A B

1 a1 a2 a

Tabella R:

C B

1 a1 b2 a

SELECT BFROM RUNION ALL

SELECT BFROM S ;

Il risultato e’:

B

aaaaba

24 / 27

Page 25: Basi di Dati: Corso di laboratorio - Lezione 4Join Esterno Completo in SQL Example (Join completo insegnante e corso) Iljoin esterno completodelle tabelle insegnante e corso: permette

Join di TabelleAlgebra Insiemistica su Tabelle

Sommario e Bibliografia

Sommario (I)

Sinassi del costrutto di Join

Ricapitolando:

e’ possibile definire esplicitamente una joined (intermediate) tablenella clausola FROM del comando SELECT utilizzando una delle tresinassi:

1 < tabella1> [{{RIGHT|LEFT|FULL}[OUTER]}] JOIN <tabella2>ON <predicato> [. . . ]

2 < tabella1> [{{RIGHT|LEFT|FULL}[OUTER]}] JOIN <tabella2>USING (<colonna> [, . . . ]) [. . . ]

3 < tabella1> NATURAL [{{RIGHT|LEFT|FULL}[OUTER]}] JOIN<tabella2> [. . . ]

25 / 27

Page 26: Basi di Dati: Corso di laboratorio - Lezione 4Join Esterno Completo in SQL Example (Join completo insegnante e corso) Iljoin esterno completodelle tabelle insegnante e corso: permette

Join di TabelleAlgebra Insiemistica su Tabelle

Sommario e Bibliografia

Sommario

Traduzione degli operatori insiemistici (II)

L’operatore insiemistico di unione relazione1 ∪ relazione2 si puo’tradurre in SQL con:

SELECT ∗ FROM relazione1 UNION SELECT ∗ FROM relazione2;

L’operatore insiemistico di intersezione relazione1 ∩ relazione2 sipuo’ tradurre in SQL con:

SELECT ∗ FROM relazione1 INTERSECT SELECT ∗ FROM

relazione2;

L’operatore insiemistico di differenza relazione1 \ relazione2 si puo’tradurre in SQL con:

SELECT ∗ FROM relazione1 EXCEPT SELECT ∗ FROM relazione2;

26 / 27

Page 27: Basi di Dati: Corso di laboratorio - Lezione 4Join Esterno Completo in SQL Example (Join completo insegnante e corso) Iljoin esterno completodelle tabelle insegnante e corso: permette

Join di TabelleAlgebra Insiemistica su Tabelle

Sommario e Bibliografia

Bibliografia

Bibliografia ed Approfondimenti

R.A.Elmasri, S.B. Navathe. Sistemi di Basi di Dati – Fondamenti:Capitolo 8

Capitolo 6 (Data Manipulation) del manuale di PostgreSQL(http://www.postgresql.org/docs/manuals/)

27 / 27