20th Jul 2022 Tempo di lettura: 4 minuti JOIN SQL Patrycja Dybka join Indice CROSS JOIN INNER JOIN OUTER JOIN Giunzioni basate su operatori NATURAL JOIN Una serie di link utili: Una JOIN SQL è un metodo per recuperare dati da due o più tabelle di database. Questo articolo presenta una panoramica di base sull'aspetto dei dati di una particolare join SQL. Un modo popolare di comprendere le unioni SQL è quello di visualizzarle utilizzando i diagrammi di Venn, per cui ogni esempio ha il diagramma di Venn corrispondente, l'istruzione SELECT appropriata e la tabella dei risultati. Esistono alcuni tipi principali di join SQL: INNER JOIN [LEFT | RIGHT | FULL] OUTER JOIN NATURAL JOIN CROSS JOIN Distinguiamo l'implementazione di questi join in base agli operatori di join: equi e theta, che verranno descritti in seguito. Per gli scopi di questo articolo, parliamo di join con un semplice esempio. Supponiamo di avere due tabelle di base, TabellaA e TabellaB, riempite con alcuni dati di esempio. Poiché uniremo le tabelle sulla colonna name, distingueremo le righe con lo stesso nome evidenziandole in rosso. Nelle sezioni seguenti vedremo cosa succede a questi dati quando vengono implementati diversi tipi di join. CROSS JOIN Una CROSS JOIN è un prodotto cartesiano di TabellaA e TabellaB. Ogni riga della TabellaA viene abbinata a ogni riga della TabellaB; ecco perché una CROSS JOIN non ha senso nella maggior parte delle situazioni. SELECT * FROM tableA CROSS JOIN tableB; TabellaA e TabellaB contengono 4 righe. La tabella risultante avrà 4 * 4 = 16 righe e avrà il seguente aspetto: INNER JOIN Una INNER JOIN unisce SOLO le righe corrispondenti in ENTRAMBE le tabelle. Una JOIN senza altre parole chiave (come INNER, OUTER, LEFT, ecc.) è una INNER JOIN. I risultati vengono trovati nell'area di sovrapposizione. SELECT * FROM tableA INNER JOIN tableB ON tableA.name = tableB.name La tabella risultante sarà la seguente: OUTER JOIN FULL OUTER JOIN restituisce le righe corrispondenti e non corrispondenti di entrambe le tabelle (è un'unione di entrambe). Se non c'è corrispondenza, il lato mancante conterrà null. SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name; La tabella risultante sarà la seguente: Una LEFT OUTER JOIN restituisce tutte le righe della tabella di sinistra (TabellaA) con le righe corrispondenti della tabella di destra (TabellaB) o null - se non c'è corrispondenza nella tabella di destra. I risultati si trovano nell'intero cerchio di sinistra: SELECT * FROM TableA LEFT OUTER JOIN TableB ON tableA.name = tableB.name; La tabella risultante sarà la seguente: Una RIGHT OUTER JOIN restituisce tutte le righe della tabella di destra (TabellaB) con le righe corrispondenti della tabella di sinistra (TabellaA) o null - se non c'è corrispondenza nella tabella di sinistra. I risultati si trovano nell'intero cerchio di destra: SELECT * FROM tableA RIGHT OUTER JOIN tableB ON tableA.name = tableB.name La tabella risultante sarà la seguente: Giunzioni basate su operatori Implementazione dell'equi-join Questa giunzione viene effettuata utilizzando l'operatore di uguaglianza (=) per confrontare i valori della PrimaryKey di una tabella e i valori della Foreign Key di un'altra tabella. SELECT * FROM TableA INNER/OUTER JOIN TableB ON TableA.PK =TableB.Fk; Implementazione della giunzione teta (non equa) È la stessa cosa della JOIN equi, ma consente tutti gli altri operatori come >, <, >= ecc. SELECT * FROM TableA INNER/OUTER JOIN TableB ON tableA.Pk <= tableB.Fk; Implementazione dell'autogiunzione Questo tipo di JOIN viene solitamente utilizzato in caso di relazioni unarie, in cui una tabella viene combinata con se stessa. SELECT * FROM TableA A1 JOIN TableA A2 ON A1.Pk = A2.Fk; NATURAL JOIN Una join NATURAL è un tipo di join EQUI. Non è necessario utilizzare una clausola ON. Le colonne con lo stesso nome nelle tabelle associate appaiono una sola volta. SELECT * FROM tableA NATURAL JOIN tableB Manipolando le parole chiave si possono escludere dati specifici. Una OUTER EXCLUDING JOIN restituisce tutti i record della TabellaA e tutti i record della TabellaB che non corrispondono. SELECT * FROM tableA FULL OUTER JOIN tableB ON tableA.name = tableB.name WHERE tableA.name IS NULL OR tableB.name IS NULL La tabella risultante sarà la seguente: Una LEFT EXCLUDING JOIN restituisce tutti i record della TabellaA che non corrispondono a nessun record della TabellaB. SELECT * FROM tableA LEFT JOIN tableB ON tableA.name = tableB.name WHERE tableB.name IS NULL La tabella risultante sarà la seguente: Una RIGHT EXCLUDING JOIN restituisce tutti i record della TabellaB che non corrispondono a nessun record della TabellaA. SELECT * FROM tableA RIGHT JOIN tableB ON tableA.name = tableB.name WHERE tableA.name IS NULL La tabella risultante sarà la seguente: Una serie di link utili: Orrore di codifica: Una spiegazione visiva delle giunzioni sql Progetto di codice: Una rappresentazione visiva dei join sql SQL Rockstar: Esempi di join SQL nel mondo reale Tags: join