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