22nd Jun 2023 Tempo di lettura: 8 minuti Come scrivere join multipli in una query SQL Dominika Florczykowska sql join Indice Cominciamo con un esempio Come funziona l'unione di più tabelle Tabelle di giunzione Una tabella di giunzione con colonne aggiuntive Una tabella di giunzione a 3 vie Uniamo alcune tabelle! Vi siete mai chiesti come funzionano i join multipli? Volete sapere come unire più tabelle in una sola query? Leggete questo articolo per scoprirlo! Se siete alle prime armi con l'SQL, potreste avere difficoltà a capire il concetto di JOINSQL, soprattutto se dovete unire più di due tabelle in una sola query. Non preoccupatevi! In questo articolo esploreremo il funzionamento di JOIN e risolveremo tutti i suoi misteri! Il modo migliore per imparare l'SQL è la pratica. Se volete imparare a unire le tabelle in SQL, date un'occhiata al nostro corso interattivo. SQL JOINs interattivo. Offre oltre 90 esercizi pratici che vi permetteranno di scrivere diversi tipi di JOIN. Cominciamo con un esempio Immaginate di avere le seguenti tre tabelle: player, team, e coach. Costruiamo una query che elenchi i nomi di tutti i giocatori, il nome della loro squadra e il nome del loro allenatore. È possibile ottenere tutte queste informazioni utilizzando la seguente query: SELECT player.name, team.name, coach.name FROM player JOIN team ON player.team_id = team.id JOIN coach ON team.coach_id = coach.id; Abbiamo due diverse operazioni di JOIN. Le tabelle player e team vengono unite per prime, quindi viene unita anche la tabella coach. Per creare una condizione di join, è necessario che entrambe le tabelle unite abbiano una colonna che contenga le stesse informazioni. La colonna team_id della tabella player contiene il valore team_id; questo è lo stesso valore della colonna id della tabella. team della tabella. Pertanto, la prima condizione di unione è ON player.team_id = team.id Allo stesso modo, la join tra la tabella team e la tabella coach è ON team.coach_id = coach.id. Se avete difficoltà a ricordare l'esatta sintassi di SQL JOINs, assicuratevi di mettere tra i preferiti il nostro fantastico SQL JOIN Cheat Sheet! Come funziona l'unione di più tabelle Supponiamo di avere i seguenti dati nelle nostre tabelle: coach idname 1Mark Swanson 2Alice Wright team idnamecoach_id 1Ambitious Raptors2 2Fire Pandas1 3Steel Cats2 player idnameteam_id 1John Rodger1 2Paul Smith1 3David McDonald2 4Sarah Grey3 5Sophie Brown3 Eseguiamo ora una query che elenca i nomi di tutti i giocatori, il nome della loro squadra e il nome del loro allenatore: SELECT player.name, team.name, coach.name FROM player JOIN team ON player.team_id = team.id JOIN coach ON team.coach_id = coach.id; Otterremo come risultato la seguente tabella: player.nameteam.namecoach.name John RodgerAmbitious RaptorsAlice Wright Paul SmithAmbitious RaptorsAlice Wright David McDonaldFire PandasMark Swanson Sarah GreySteel CatsAlice Wright Sophie BrownSteel CatsAlice Wright Ok, ma cosa succede davvero "sotto il cofano" quando due tabelle vengono unite? Diamo un'occhiata più da vicino al nostro esempio. Innanzitutto, il sito JOIN delle tabelle player e team forma una "tabella virtuale". L'aspetto è simile a questo: player.idplayer.nameplayer.team_idteam.idteam.nameteam.coach_id 1John Rodger11Ambitious Raptors2 2Paul Smith11Ambitious Raptors2 3David McDonald22Fire Pandas1 4Sarah Grey33Steel Cats2 5Sophie Brown33Steel Cats2 Come si può vedere, questa "tabella virtuale" contiene tutte le colonne di entrambe le tabelle player e team e delle tabelle. Ehi, abbiamo unito 3 tabelle in questa query di esempio! Cosa è successo alla tabella coach ? È facile! Abbiamo già una "tabella virtuale" composta dalle tabelle player e team quindi sembra che ci troviamo di nuovo di fronte a un join di due tabelle, solo che questa volta uniremo la tabella coach alla "tabella virtuale". Quindi, la tabella unita finale avrà questo aspetto: player.idplayer.nameplayer.team_idteam.idteam.nameteam.coach_idcoach.idcoach.name 1John Rodger11Ambitious Raptors22Alice Wright 2Paul Smith11Ambitious Raptors22Alice Wright 3David McDonald22Fire Pandas11Mark Swanson 4Sarah Grey33Steel Cats22Alice Wright 5Sophie Brown33Steel Cats22Alice Wright Le colonne che appartengono alla "tabella virtuale" (l'unione delle tabelle player e team) sono indicate in arancione; le colonne della tabella coach sono mostrate in blu. Importante: quando si unisce un'altra tabella, la condizione di unione deve includere una colonna che corrisponde a una colonna di una delle tabelle precedentemente unite. Nel nostro esempio, la tabella coach viene unita alla tabella virtuale utilizzando l'ID dell'allenatore, che è presente nella tabella e nella tabella virtuale. coach e nella tabella team tabella. Pertanto, era presente nella "tabella virtuale". Si può immaginare che le tabelle unite siano "collegate" tra loro con condizioni di unione: Naturalmente, non è necessario visualizzare tutte le colonne della tabella unita. Nelle query JOIN, di solito si specificano le colonne che si desidera visualizzare. Si noti che nella query di esempio precedente è stato fatto così: sono stati mostrati solo il nome del giocatore, il nome della squadra e il nome dell'allenatore. Tabelle di giunzione Una tabella di giunzione è una tabella che collega due o più tabelle. Molti join di più tabelle prevedono l'uso di una tabella di giunzione. Sembra vago? Vediamola in azione. Immaginiamo di avere le tabelle author e book. Un autore può aver scritto molti libri e un libro può avere molti autori. Per modellare una relazione di questo tipo (chiamata relazione molti-a-molti), abbiamo bisogno di una terza tabella: author_book. L'unico scopo di questa tabella è quello di collegare le relazioni author e book tra loro. La tabella author_book è un esempio di tabella di giunzione. Supponiamo di avere i seguenti dati nelle nostre tabelle: author idname 1Sarah Green 2Martin Davis 3Steve Johnson book idname 1The Translucent Door 2Whisper of Dawn 3To Catch a Dream author_book author_idbook_id 11 21 12 32 23 Se si vuole unire le tabelle author e book è necessario utilizzare anche la tabella di giunzione author_book. Ad esempio, per elencare tutti gli autori e i loro libri, si può scrivere una query come questa: SELECT author.name, book.name FROM author JOIN author_book ON author.id = author_book.author_id JOIN book ON book.id = author_book.book_id ORDER BY author.name; Per prima cosa, la tabella author_book viene unita alla tabella author per formare una "tabella virtuale". Poi, la tabella book viene unita alla "tabella virtuale". Quando si uniscono tabelle collegate da una tabella di giunzione, assicurarsi di unire le tabelle non collegate alla tabella di giunzione. Nel nostro esempio, author è unita a author_book. Quindi book viene anch'essa unita. Se nel database è presente una tabella di giunzione, le giunzioni che coinvolgono queste tabelle di solito coinvolgono tre o più tabelle. Il risultato della query sarà simile a questo. Nel risultato non si vede nessuna colonna della tabella di giunzione, ma l'unione è essenziale per far funzionare correttamente la query: author.namebook.name Sarah GreenThe Translucent Door Martin DavisThe Translucent Door Sarah GreenWhisper of Dawn Steve JohnsonWhisper of Dawn Martin DavisTo Catch a Dream Una tabella di giunzione con colonne aggiuntive Nell'esempio precedente, le uniche colonne presenti nella tabella di giunzione erano quelle che facevano riferimento ad altre tabelle. Tuttavia, non è necessario che sia così! La tabella di giunzione può contenere anche altri campi. Questi campi memorizzano informazioni aggiuntive sulla relazione. Vediamo un esempio. Questa volta abbiamo le seguenti 3 tabelle: doctor, patient e appointment. Riuscite a indovinare qual è la tabella di giunzione? È vero! La tabella di giunzione è la appointment tabella. Collega i medici con i loro pazienti per creare appuntamenti. Tuttavia, la appointment tabella ha bisogno di colonne aggiuntive, come la data e l'ora dell'appuntamento. Supponiamo di avere i seguenti dati nelle nostre tabelle: doctor idname 1Ann Johnson 2Marlene Smith 3John West patient idname 1Mary Brown 2Sally Rodgers 3Mark Jackson appointment iddoctor_idpatient_iddatetime 11116/04/20238:00 21316/04/20239:00 32217/04/20238:00 42117/04/20239:00 53317/04/202316:00 Ora, costruiamo una query che aiuti i medici a gestire i loro impegni: per ogni medico, vorremmo vedere tutte le date e gli orari dei suoi appuntamenti, oltre al nome del relativo paziente. È possibile ottenere tutte queste informazioni utilizzando la seguente query: SELECT doctor.name, appointment.date, appointment.time, patient.name FROM doctor JOIN appointment ON doctor.id = appointment.doctor_id JOIN patient ON appointment.patient_id = patient.id; Per prima cosa, la tabella appointment viene unita alla tabella doctor per formare una "tabella virtuale". Poi, la tabella patient tabella viene unita alla "tabella virtuale" facendo riferimento alla tabella di giunzione appointment. Il risultato della query è il seguente: doctor.nameappointment.dateappointment.timepatient.name Ann Johnson16/04/20238:00Mary Brown Ann Johnson16/04/20239:00Mark Jackson Marlene Smith17/04/20238:00Sally Rodgers Marlene Smith17/04/20239:00Mary Brown John West17/04/202316:00Mark Jackson Una tabella di giunzione a 3 vie Le tabelle di giunzione possono anche collegare tre o più tabelle. Ad esempio, immaginiamo che un medico lavori in diverse sedi di cliniche. Quando si fissa un appuntamento, viene assegnato un medico, ma bisogna anche scegliere la clinica in cui si svolgerà l'appuntamento. Quindi, la nostra appointment collega tre tabelle: doctor, patiente clinic. In questo scenario, molte query richiederanno l'unione di tutte e quattro le tabelle. In alcune situazioni, le tabelle di giunzione possono collegare ancora più tabelle. Uniamo alcune tabelle! Ottimo lavoro! Avete appena imparato a utilizzare più JOIN in un'unica query SQL. Riassumiamo quanto appena appreso: Una JOIN a tre tabelle è una JOIN di due tabelle con un'altra join. La JOIN di due tabelle forma una "tabella virtuale" alla quale viene unita l'altra tabella. La condizione di unione è solitamente un'uguaglianza tra alcune colonne di una tabella che condividono valori con colonne dell'altra tabella. Quando si uniscono più di due tabelle, nella maggior parte dei casi è necessario assicurarsi che la condizione di unione si "colleghi" alle tabelle già unite. Una tabella di giunzione è una tabella che collega due o più tabelle facendo riferimento agli ID delle tabelle interessate. Quando è coinvolta una tabella di giunzione, è probabile che si debba usare un join multitabella. Se siete curiosi di saperne di più su SQL JOINs, date un'occhiata a questi articoli del nostro blog: Scoprite alcuni suggerimenti su come esercitarsi con SQL JOINs. Scoprite esempi di SQL JOINs con spiegazioni dettagliate. Capire come funziona la JOIN interna in SQL. E per fare ancora un po' di pratica, ricordatevi di dare un'occhiata al nostro SQL JOINs corso interattivo! Tags: sql join