Skillbook Logo
foto profilo

Skill Factory

Lista post > Ricominciamo ... dal linguaggio SQL Lezione 9

Ricominciamo ... dal linguaggio SQL Lezione 9

Gino Visciano | Skill Factory - 14/04/2016 11:54:51 | in Tutorials

Benvenuti alla nona lezione, in questa lezione vedrete a cosa serve l'OUTER JOIN. Il Join esterno permette di rispondere alla domanda seguente:

"In un'operazione di JOIN tra gli elementi della Tabella A e quelli della Tabella B, quali elementi delle due tabelle non sono associati tra loro?"

Per vedere praticamente come funziona questo tipo di JOIN, inserite due LIBRI senza associare un GENERE e due GENERI senza associarli ad un LIBRO, eseguendo i comandi seguenti:

INSERT INTO LIBRI (CODICE_ISBN,TITOLO) VALUES ('8854505102', 'SHINING');

INSERT INTO LIBRI (CODICE_ISBN,TITOLO) VALUES ('8884516102', 'LA PIETRA FILOSOFALE');

INSERT INTO GENERI (GENERE) VALUES ('FANTASY');

INSERT INTO GENERI (GENERE) VALUES ('TRILLER');

 

Ci sono tre tipi di OUTER JOIN:

Il LEFT JOIN permette di visualizzare sia gli elementi della Tabella A associati alla Tabella B, sia gli elementi della Tabella A non associati alla Tabella B.

Ad esempio per visualizzare tutti LIBRI con i GENERI e quelli a cui non è stato associato un GENERE, potete usare il comando seguente:

SELECT L.Codice_ISBN, L.Titolo, G.Genere FROM LIBRI L LEFT JOIN GENERI G ON (L.Id_genere=G.Id);

Codice_ISBN Titolo Genere
8845247430 IO ROBOT FANTASCIENZA
8804550201 LA PAURA DI MONTALBANO GIALLI
8806176943 ODISSEA ROMANZI
8854505102 SHINING NULL
8884516102 LA PIETRA FILOSOFALE NULL

 

Il LEFT JOIN può anche visualizzare solo gli elementi della Tabella A non associati alla Tabella B.

Ad esempio per visualizzare tutti LIBRI  a cui non è stato associato un GENERE, potete usare il comando seguente:

SELECT L.Codice_ISBN, L.Titolo, G.Genere FROM LIBRI L LEFT JOIN GENERI G ON (L.Id_genere=G.Id) WHERE L.id_genere IS NULL;

 

Codice_ISBN Titolo Genere
8854505102 SHINING NULL
8884516102 LA PIETRA FILOSOFALE NULL

 

Il RIGHT JOIN permette di visualizzare sia gli elementi della Tabella A associati alla Tabella B, sia gli elementi della Tabella B non associati alla Tabella A.

Ad esempio per visualizzare tutti LIBRI con i GENERI ed i GENERI non associati ad un LIBRO, potete usare il comando seguente:

SELECT L.Codice_ISBN, L.Titolo, G.Genere FROM LIBRI L RIGHT JOIN GENERI G ON (L.Id_genere=G.Id);

Codice_ISBN Titolo Genere
8845247430 IO ROBOT FANTASCIENZA
8804550201 LA PAURA DI MONTALBANO GIALLI
8806176943 ODISSEA ROMANZI
NULL NULL FANTASY
NULL NULL TRILLER

 

Il RIGHT JOIN può anche visualizzare solo gli elementi della Tabella B non associati alla Tabella A.

Ad esempio per visualizzare tutti i GENERI non associati ad un LIBRO, potete usare il comando seguente:

SELECT L.Codice_ISBN, L.Titolo, G.Genere FROM LIBRI L RIGHT JOIN GENERI G ON (L.Id_genere=G.Id) WHERE L.id_genere IS NULL;

Codice_ISBN Titolo Genere
NULL NULL FANTASY
NULL NULL TRILLER

 

Il FULL JOIN permette di visualizzare sia gli elementi della Tabella A associati alla Tabella B, sia gli elementi della Tabella A e della Tabella B non associati tra loro.

Ad esempio per visualizzare tutti LIBRI con i GENERI e quelli a cui non è stato associati ad un GENERE e viceversa, potete usare il comando seguente:

SELECT L.Codice_ISBN, L.Titolo, G.GENERE FROM LIBRI L FULL JOIN GENERE G ON (L.Id_genere=G.Id);

Codice_ISBN Titolo Genere
8845247430 IO ROBOT FANTASCIENZA
8804550201 LA PAURA DI MONTALBANO GIALLI
8806176943 ODISSEA ROMANZI
8854505102 SHINING NULL
8884516102 LA PIETRA FILOSOFALE NULL
NULL NULL FANTASY
NULL NULL TRILLER

 

Il FULL JOIN può anche visualizzare solo  gli elementi della Tabella A e della Tabella B non associati tra loro.

Ad esempio per visualizzare tutti LIBRI  a cui non è stato associato un GENERE e viceversa, potete usare il comando seguente:

SELECT L.Codice_ISBN, L.Titolo, G.GENERE FROM LIBRI L FULL JOIN GENERE G ON (L.Id_genere=G.Id) WHERE L.id_genere IS NULL AND G.Genere IS NULL;

Codice_ISBN Titolo Genere
8854505102 SHINING NULL
8884516102 LA PIETRA FILOSOFALE NULL
NULL NULL FANTASY
NULL NULL TRILLER

 

Attenzione, se il DBMS non gestisce il JOIN di tipo FULL, come accade con MYSQL, le soluzioni equivalenti sono le seguenti:

SELECT L.Codice_ISBN, L.Titolo, G.Genere FROM LIBRI L LEFT JOIN GENERI G ON (L.Id_genere=G.Id)
UNION
SELECT L.Codice_ISBN, L.Titolo, G.Genere FROM LIBRI L RIGHT JOIN GENERI G ON (L.Id_genere=G.Id);

SELECT L.Codice_ISBN, L.Titolo, G.Genere FROM LIBRI L LEFT JOIN GENERI G ON (L.Id_genere=G.Id) WHERE L.id_genere IS NULL
UNION
SELECT L.Codice_ISBN, L.Titolo, G.Genere FROM LIBRI L RIGHT JOIN GENERI G ON (L.Id_genere=G.Id) WHERE L.id_genere IS NULL;


<< Lezione precedente           Lezione successiva >>


T U T O R I A L S    S U G G E R I T I


Share Button
TOP