18th Jul 2022 Tempo di lettura: 10 minuti 7 esempi di JOIN SQL con spiegazioni dettagliate Kateryna Koidan sql imparare sql join Indice Introduzione alle JOIN GIUNTA INTERNA Esempio 1 Esempio n. 2 GIUNZIONE SINISTRA Esempio #3 Esempio n. 4 GIUNTA GIUSTA Esempio #5 JOIN COMPLETO Esempio #6 Esempio #7 È ora di fare pratica con SQL JOINs! Avete bisogno di unire diverse tabelle per ottenere il set di risultati necessario? L'SQL JOIN è uno strumento di base ma importante utilizzato dagli analisti di dati che lavorano con i database relazionali. Capisco che possa essere difficile scegliere tra le milioni di guide introduttive alle unioni. In questo articolo mi concentrerò su esempi reali con spiegazioni dettagliate. Introduzione alle JOIN Nei database relazionali, le informazioni desiderate sono spesso memorizzate in diverse tabelle. In questi scenari, è necessario unire queste tabelle. È qui che entra in gioco il JOIN SQL. La clausola JOIN in SQL viene utilizzata per combinare le righe di diverse tabelle in base a una colonna correlata tra queste tabelle. Una panoramica dello strumento SQL JOIN è disponibile in questo articolo introduttivo. In questa guida, intendo trattare i tipi di base di SQL JOINs attraverso diversi esempi. Discuterò in dettaglio la sintassi di ciascuna query, il suo funzionamento, la costruzione di una condizione e l'interpretazione dei risultati. Per gli esempi, utilizzeremo le informazioni relative a una casa editrice che pubblica libri originali e tradotti. Il nostro database contiene quattro tabelle: books, authors, editors, e translators. books idtitletypeauthor_ideditor_idtranslator_id 1Time to Grow Up!original1121 2Your Triptranslated152232 3Lovely Loveoriginal1424 4Dream Your Lifeoriginal1124 5Orangestranslated122531 6Your Happy Lifetranslated152233 7Applied AItranslated132334 8My Last Bookoriginal1128 authors idfirst_namelast_name 11EllenWriter 12OlgaSavelieva 13JackSmart 14DonaldBrain 15YaoDou editors idfirst_namelast_name 21DanielBrown 22MarkJohnson 23MariaEvans 24CathrineRoberts 25SebastianWright 26BarbaraJones 27MatthewSmith translators idfirst_namelast_name 31IraDavies 32LingWeng 33KristianGreen 34RomanEdwards Se volete esercitarvi a unire le tabelle in SQL con molti esempi, vi consiglio di seguire il corso SQL JOINs corso. Include 93 sfide di codifica! GIUNTA INTERNA Inizieremo con una query di base INNER JOIN, o semplicemente JOIN. Questo tipo di join viene utilizzato quando si vogliono visualizzare i record corrispondenti di due tabelle. Esempio 1 Supponiamo di voler mostrare i titoli dei libri insieme ai loro autori (cioè il nome e il cognome dell'autore). I titoli dei libri sono memorizzati nella tabella books e i nomi degli autori sono memorizzati nella tabella authors tabella. Nella nostra query SQL, uniremo queste due tabelle facendo corrispondere la colonna author_id della tabella books e la colonna id della tabella authors: SELECT b.id, b.title, a.first_name, a.last_name FROM books b INNER JOIN authors a ON b.author_id = a.id ORDER BY b.id; Nell'istruzione SELECT, elenchiamo le colonne da visualizzare: id del libro, titolo del libro, nome e cognome dell'autore. Nella clausola FROM si specifica la prima tabella da unire (detta anche tabella di sinistra). Nella clausola INNER JOIN si specifica la seconda tabella da unire (detta anche tabella di destra). Quindi, si utilizza la parola chiave ON per indicare al database quali colonne devono essere utilizzate per la corrispondenza dei record (cioè, la colonna author_id della tabella books e la colonna id della tabella authors tabella). Si noti anche che stiamo usando degli alias per i nomi delle tabelle (es, b per books e a per authors). Gli alias vengono assegnati nelle clausole FROM e INNER JOIN e utilizzati in tutta la query. Gli alias delle tabelle riducono la digitazione e rendono la query più leggibile. Ecco l'insieme risultante: idtitlefirst_namelast_name 1Time to Grow Up!EllenWriter 2Your TripYaoDou 3Lovely LoveDonaldBrain 4Dream Your LifeEllenWriter 5OrangesOlgaSavelieva 6Your Happy LifeYaoDou 7Applied AIJackSmart 8My Last BookEllenWriter Per ogni record della tabella di sinistra (ad esempio, books), la query controlla author_id, quindi cerca lo stesso id nella prima colonna della tabella. authors tabella. Quindi estrae il nome e il cognome corrispondenti. Si noti che l'ordine delle tabelle non ha importanza con un INNER JOIN o un semplice JOIN. L'insieme dei risultati sarebbe esattamente lo stesso se si inserisse la tabella authors nella clausola FROM e la tabella books nella clausola INNER JOIN. INNER JOIN visualizza solo i record disponibili in entrambe le tabelle. Nel nostro esempio, tutti i libri hanno un autore corrispondente e tutti gli autori hanno almeno un libro corrispondente. Vediamo quindi cosa succede se alcuni record non vengono abbinati. Esempio n. 2 Nel nostro secondo esempio, visualizzeremo i libri insieme ai loro traduttori (cioè, il cognome del traduttore). Solo la metà dei libri è stata tradotta e quindi ha un traduttore corrispondente. Quindi, quale sarebbe il risultato dell'unione degli elementi books e translators utilizzando INNER JOIN? SELECT b.id, b.title, b.type, t.last_name AS translator FROM books b JOIN translators t ON b.translator_id = t.id ORDER BY b.id; idtitletypetranslator 2Your TriptranslatedWeng 5OrangestranslatedDavies 6Your Happy LifetranslatedGreen 7Applied AItranslatedEdwards La query produce solo i libri che sono stati tradotti. Ho aggiunto la colonna del tipo per renderla più chiara. Il resto dei libri non ha potuto essere abbinato alla tabella translators e quindi non vengono visualizzati. Ecco come funziona INNER JOIN. Si noti inoltre che nel secondo esempio è stata utilizzata la parola chiave JOIN invece di INNER JOIN. Non ha alcun impatto sul risultato perché INNER JOIN è il tipo di join predefinito in SQL. Per conoscere gli altri tipi di join in SQL, consultare questa guida dettagliata. Ok. Ora sappiamo come unire le tabelle quando è necessario visualizzare solo i record corrispondenti. Ma se volessimo mantenere tutti i libri nell'insieme risultante senza ridurre la tabella ai soli libri tradotti? È il momento di imparare le join esterne! GIUNZIONE SINISTRA Inizieremo la nostra panoramica sulle JOIN ESTERNE con LEFT JOIN. Questo tipo di JOIN SQL va applicato quando si desidera mantenere tutti i record della tabella di sinistra e solo i record corrispondenti della tabella di destra. Esempio #3 Per esempio, supponiamo di voler visualizzare le informazioni sull'autore e sul traduttore di ogni libro (cioè i loro cognomi). Vogliamo anche mantenere le informazioni di base su ogni libro (ad esempio, id, title e type). Per ottenere tutti questi dati, dobbiamo unire tre tabelle: books per le informazioni di base sui libri, authors per i cognomi degli autori e translators per i cognomi dei traduttori. Come abbiamo visto nell'esempio precedente, utilizzando INNER JOIN (o il semplice JOIN) per unire la tabella translators si perdono tutti i record dei libri originali (non tradotti). Questo non è ciò che vogliamo ora. Quindi, per mantenere tutti i libri nell'insieme dei risultati, uniremo le tabelle books, authors, e translators utilizzando il comando LEFT JOIN. SELECT b.id, b.title, b.type, a.last_name AS author, t.last_name AS translator FROM books b LEFT JOIN authors a ON b.author_id = a.id LEFT JOIN translators t ON b.translator_id = t.id ORDER BY b.id; Si noti che iniziamo con la tabella books nella clausola FROM, rendendola la tabella di sinistra. Questo perché vogliamo conservare tutti i record di questa tabella. L'ordine delle altre tabelle non ha importanza. Nella nostra query, per prima cosa LEFT JOIN la tabella authors in base alla colonna author_id della tabella books e la colonna id della tabella authors tabella. Quindi, uniamo la tabella translators tabella in base alla colonna translator_id della tabella books e la colonna id della tabella translators tabella. Ecco la tabella risultante: idtitletypeauthortranslator 1Time to Grow Up!originalWriterNULL 2Your TriptranslatedDouWeng 3Lovely LoveoriginalBrainNULL 4Dream Your LifeoriginalWriterNULL 5OrangestranslatedSavelievaDavies 6Your Happy LifetranslatedDouGreen 7Applied AItranslatedSmartEdwards 8My Last BookoriginalWriterNULL Fantastico! Abbiamo conservato tutti i libri! Si notino i valori NULL nella colonna translator. Questi valori NULL corrispondono ai record che non hanno trovato corrispondenza nella tabella. translators tabella. Questi record sono relativi a libri originali senza traduttori. Si spera di aver compreso l'intuizione delle JOIN SINISTRE. Per saperne di più su questo tipo di JOIN SQL, consultate questa guida introduttiva. Bene, vediamo un altro esempio di LEFT JOIN per consolidare le conoscenze sull'argomento. Esempio n. 4 Questa volta vogliamo mostrare le informazioni di base del libro (cioè ID e titolo) insieme ai cognomi degli editori corrispondenti. Anche in questo caso, vogliamo mantenere tutti i libri nell'insieme dei risultati. Quindi, quale sarebbe la query? SELECT b.id, b.title, e.last_name AS editor FROM books b LEFT JOIN editors e ON b.editor_id = e.id ORDER BY b.id; idtitleeditor 1Time to Grow Up!Brown 2Your TripJohnson 3Lovely LoveRoberts 4Dream Your LifeRoberts 5OrangesWright 6Your Happy LifeJohnson 7Applied AIEvans 8My Last BookNULL Piuttosto semplice, no? Anche in questo caso abbiamo mantenuto tutti i libri nel set di risultati, compreso l'ultimo, che non ha un editore corrispondente nel nostro database (notare il valore NULL nell'ultima riga). Possiamo immaginare che l'editore non sia presente nella tabella degli editori attuali semplicemente perché ha lasciato la casa editrice dopo aver curato il libro. E se nel team ci fossero dei redattori che non hanno ancora pubblicato alcun libro? Verifichiamo con il tipo di join esterno successivo. GIUNTA GIUSTA RIGHT JOIN è molto simile a LEFT JOIN. Scommetto che avete indovinato che l'unica differenza è che RIGHT JOIN conserva tutti i record della tabella di destra, anche se non possono essere abbinati alla tabella di sinistra. Se lo avete fatto, avete ragione! Esempio #5 Ripetiamo l'esempio precedente, ma questa volta il nostro compito sarà quello di conservare tutti i record della tabella. editors tabella. Avremo quindi la stessa query dell'esempio #4, ma sostituiremo LEFT JOIN con RIGHT JOIN: SELECT b.id, b.title, e.last_name AS editor FROM books b RIGHT JOIN editors e ON b.editor_id = e.id ORDER BY b.id; idtitleeditor 1Time to Grow Up!Brown 2Your TripJohnson 3Lovely LoveRoberts 4Dream Your LifeRoberts 5OrangesWright 6Your Happy LifeJohnson 7Applied AIEvans NULLNULLJones NULLNULLSmith Con la modifica di una sola parola nella query, il risultato è molto diverso. Possiamo vedere che abbiamo due editori(Jones e Smith) che non hanno libri corrispondenti nel nostro database. Sembrano nuove assunzioni! E questo non è l'unico cambiamento. Non c'è nemmeno Il mio ultimo libro nell'insieme dei risultati. Questo record della tabella di sinistra (ad es, books) non ha trovato riscontro nella tabella di destra (cioè, ), editors) e non è stato inserito nel risultato finale. Le RIGHT JOIN sono raramente utilizzate nella pratica, perché di solito possono essere sostituite da LEFT JOIN, molto più comuni. Per esempio, nel nostro caso, potremmo prendere la nostra query dall'esempio #4 e scambiare semplicemente books e editors inserendo editors nella clausola FROM, rendendola la tabella di sinistra, e mettendo books nella clausola LEFT JOIN, rendendola la tabella di destra. Il risultato sarebbe stato lo stesso della tabella precedente. JOIN COMPLETO Siamo arrivati all'ultimo tipo di join esterno, che è FULL JOIN. Si usa FULL JOIN quando si vogliono conservare tutti i record di tutte le tabelle, anche quelli non corrispondenti. Quindi, è come la combinazione di LEFT JOIN e RIGHT JOIN. Passiamo subito agli esempi per vedere come funziona in pratica. Esempio #6 Per cominciare, uniamo di nuovo le tabelle books e editors ma questa volta terremo tutti i record di entrambe le tabelle. Utilizziamo semplicemente FULL JOIN come parola chiave di join, lasciando il resto della query senza alcuna modifica: SELECT b.id, b.title, e.last_name AS editor FROM books b FULL JOIN editors e ON b.editor_id = e.id ORDER BY b.id; idtitleeditor 1Time to Grow Up!Brown 2Your TripJohnson 3Lovely LoveRoberts 4Dream Your LifeRoberts 5OrangesWright 6Your Happy LifeJohnson 7Applied AIEvans 8My Last BookNULL NULLNULLJones NULLNULLSmith Sembra fantastico! Come previsto, abbiamo mantenuto tutti i libri, anche quelli che non hanno un editore corrispondente. Inoltre, abbiamo mantenuto tutti gli editori, anche quelli che non hanno ancora un libro corrispondente. Si noti che l'ordine delle tabelle non è importante con FULL JOIN. Il risultato sarebbe lo stesso se si scambiassero le tabelle mettendo la tabella editors nella clausola FROM e la tabella books nella clausola FULL JOIN. Esempio #7 Nel nostro ultimo esempio, vogliamo unire tutte e quattro le tabelle per ottenere informazioni su tutti i libri, gli autori, gli editori e i traduttori in un'unica tabella. Pertanto, utilizzeremo FULL JOIN in tutta la nostra query SQL: SELECT b.id, b.title, a.last_name AS author, e.last_name AS editor, t.last_name AS translator FROM books b FULL JOIN authors a ON b.author_id = a.id FULL JOIN editors e ON b.editor_id = e.id FULL JOIN translators t ON b.translator_id = t.id ORDER BY b.id; idtitleauthoreditortranslator 1Time to Grow Up!WriterBrownNULL 2Your TripDouJohnsonWeng 3Lovely LoveBrainRobertsNULL 4Dream Your LifeWriterRobertsNULL 5OrangesSavelievaWrightDavies 6Your Happy LifeDouJohnsonGreen 7Applied AISmartEvansEdwards 8My Last BookWriterNULLNULL NULLNULLNULLJonesNULL NULLNULLNULLSmithNULL Come richiesto, la tabella mostra tutti i libri, gli autori, gli editori e i traduttori. I record che non hanno trovato corrispondenza hanno i valori NULL. Questa è un'ottima panoramica dei dati memorizzati nel nostro database. È ora di fare pratica con SQL JOINs! La conoscenza di SQL JOINs è uno dei requisiti fondamentali per chiunque lavori con i database relazionali. Per aiutarvi a orientarvi tra i diversi tipi di JOIN SQL, LearnSQL.com ha sviluppato una scheda informativa sulle JOIN SQL di due pagine. Il documento fornisce la sintassi delle diverse JOIN e alcuni esempi. Tuttavia, per padroneggiare le JOIN è necessario fare molta pratica. Vi consiglio di iniziare con il corso interattivo SQL JOINs che copre i principali tipi di JOIN attraverso decine di esempi ed esercizi. Per saperne di più su questo corso, consultate questo articolo riassuntivo. BONUS: Ecco le 10 principali domande di colloquio su SQL JOIN e come rispondere. Buon apprendimento! Tags: sql imparare sql join