20th Jul 2022 Tempo di lettura: 5 minuti Come unire due tabelle in base a più colonne in SQL Kateryna Koidan sql imparare sql sql joins Indice Unire due tabelle su più colonne Esempio 1: SQL JOIN per due colonne Esempio 2: SQL JOIN per tre colonne Esercitiamoci su SQL JOINs per colonne multiple! La funzione SQL JOIN è uno strumento importante per combinare informazioni provenienti da diverse tabelle. Nella maggior parte dei casi, le tabelle vengono unite in base a una chiave primaria di una tabella e a una chiave esterna di un'altra tabella. Tuttavia, spesso è necessario unire le tabelle in base a due o più colonne. In questo articolo, illustrerò i motivi per cui si desidera unire le tabelle in base a più colonne e come farlo in SQL. L'unione di tabelle per una sola colonna non funziona in alcuni scenari. Ad esempio, si possono verificare casi in cui non esiste una colonna nella tabella che identifichi in modo univoco le righe. Oppure le tabelle che si desidera unire potrebbero non avere una sola colonna comune da utilizzare per l'unione. In situazioni come queste, potrebbe essere necessario utilizzare più colonne per unire le tabelle, ad esempio il nome e il cognome, oppure il numero d'ordine e l'anno se la numerazione degli ordini ricomincia ogni anno. Vediamo alcuni esempi per capire come funziona in pratica. Unire due tabelle su più colonne Immaginiamo di gestire una rete di asili. Nel nostro database abbiamo le seguenti tabelle: students, dove abbiamo informazioni su ogni studente, come il nome, la scuola materna frequentata, la classe, l'anno di laurea e l'insegnante. teachers, dove abbiamo il nome e il livello di istruzione di ogni insegnante. classes, dove sono presenti informazioni su ogni classe, come il nome dell'asilo, la classe, l'anno di laurea e il nome dell'aula. students idfirst_namelast_namekindergartengraduation_yearclassteacher_first_nameteacher_last_name 1MaryJonesSunshine2021AIsabellaLopez 2JohnSmithLove & Learn2020BMiaGonzalez 3MarkAndersonButterfly2020BSophiaStevenson 4StevenMooreButterfly2021CMariaStuart 5DianaMillerButterfly2021CMariaStuart 6AnnaDavisSunshine2021AEmmaGrey 7HellenBrownSunshine2020BOliviaTaylor 8GracyLeeLove & Learn2020ACharlotteJohnson 9SaraGarciaLove & Learn2021BJasmineHarris 10KateWilsonSunshine2019BOliviaTaylor teachers idfirst_namelast_nameeducation 101IsabellaLopezUndergraduate 102MariaStuartUndergraduate 103EmmaGreyGraduate 104OliviaTaylorGraduate 105CharlotteJohnsonGraduate 106MiaGonzalezUndergraduate 107SophiaStevensonUndergraduate 108JasmineHarrisUndergraduate classes idkindergartengraduation_yearclassclassroom 201Sunshine2019BIronman 202Butterfly2020BSun 203Love & Learn2020ALove 204Love & Learn2020BHappiness 205Sunshine2020AHulk 206Sunshine2020BSuperman 207Butterfly2021AGarden 208Butterfly2021BIsland 209Butterfly2021CSea 210Love & Learn2021ADream 211Love & Learn2021BLaugh 212Sunshine2021AIronman Si può notare che il nostro database non è perfettamente organizzato. In genere, la tabella students include chiavi esterne come l'ID dell'insegnante e l'ID della classe, invece di informazioni dettagliate sugli insegnanti e sulle classi corrispondenti. Tuttavia, anche con i dati memorizzati in questo modo, è possibile unire le tabelle, purché ogni tabella abbia una serie di colonne che identificano in modo univoco ogni record. È il momento di eseguire un paio di query SQL! Esempio 1: SQL JOIN per due colonne Nel nostro primo esempio, vogliamo conoscere il livello di istruzione dell'insegnante per ogni studente. Per questo, dobbiamo unire le informazioni delle tabelle students e teachers. Sfortunatamente, non abbiamo la colonna ID insegnante nella tabella students tabella. Tuttavia, abbiamo il nome e il cognome dell'insegnante in entrambe le tabelle. Se non abbiamo insegnanti con nomi e cognomi identici, possiamo tranquillamente unire le tabelle in base a queste due colonne. Ecco la query: SELECT s.first_name, s.last_name, s.teacher_first_name, s.teacher_last_name, t.education AS teacher_education FROM students s JOIN teachers t ON s.teacher_first_name = t.first_name AND s.teacher_last_name = t.last_name; Se avete bisogno di un ripasso della sintassi di SQL JOIN, date un'occhiata a questo ottimo SQL JOIN Cheat Sheet. Notate le due condizioni nella clausola ON, in quanto si richiede che (1) il nome della tabella insegnanti sia uguale al nome dell'insegnante nella tabella studenti e (2) che il cognome della tabella insegnanti sia uguale al cognome dell'insegnante nella tabella studenti. Come si vede, per specificare due condizioni, è sufficiente inserirle entrambe nella clausola ON, utilizzando la parola chiave AND tra le due. Ecco il risultato: first_namelast_nameteacher_first_nameteacher_last_nameteacher_education MaryJonesIsabellaLopezUndergraduate StevenMooreMariaStuartUndergraduate DianaMillerMariaStuartUndergraduate AnnaDavisEmmaGreyGraduate HellenBrownOliviaTaylorGraduate KateWilsonOliviaTaylorGraduate JohnSmithMiaGonzalezUndergraduate MarkAndersonSophiaStevensonUndergraduate GracyLeeCharlotteJohnsonGraduate SaraGarciaJasmineHarrisUndergraduate Sembra buono! Ora vediamo il livello di istruzione dell'insegnante corrispondente per ogni studente. Per fare più pratica con le unioni di tabelle in SQL, consultate questo corso interattivo. SQL JOINs corso interattivo. Esempio 2: SQL JOIN per tre colonne Nell'esempio precedente abbiamo visto come unire due tabelle in base a due condizioni. Se necessario, possiamo avere anche più condizioni. Vediamo come unire le tabelle in SQL con tre condizioni. Ora vogliamo scoprire il nome dell'aula in cui ogni studente ha giocato e studiato. Le informazioni sull'aula sono disponibili nella tabella classes nella tabella Non abbiamo l'ID della classe nella tabella. students tabella. Tuttavia, abbiamo tre colonne che, combinate, identificano in modo univoco una classe: scuola materna, graduation_year, class. Le stesse colonne sono presenti nella classes tabella. Pertanto, combineremo students e classes utilizzando tre colonne: SELECT s.first_name, s.last_name, c.kindergarten, c.graduation_year, c.class, c.classroom FROM students s JOIN classes c ON s.kindergarten = c.kindergarten AND s.graduation_year = c.graduation_year AND s.class = c.class; Come si può vedere, uniamo le tabelle utilizzando le tre condizioni poste nella clausola ON con le parole chiave AND in mezzo. Ecco il risultato: first_namelast_namekindergartengraduation_yearclassclassroom MarkAndersonButterfly2020BSun JohnSmithLove & Learn2020BHappiness StevenMooreButterfly2021CSea MaryJonesSunshine2021AIronman GracyLeeLove & Learn2020ALove HellenBrownSunshine2020BSuperman DianaMillerButterfly2021CSea AnnaDavisSunshine2021AIronman SaraGarciaLove & Learn2021BIronman KateWilsonSunshine2019BLaugh JOIN ha funzionato come previsto! Ora abbiamo la classe corrispondente per ogni studente. Se volete vedere altri esempi, date un'occhiata a questo ricettario sull'unione di tabelle per colonne multiple. Esercitiamoci su SQL JOINs per colonne multiple! SQL JOIN è uno degli strumenti fondamentali per gli analisti di dati che lavorano con SQL. I database relazionali sono costruiti in modo tale che i report analitici di solito richiedono la combinazione di informazioni provenienti da diverse tabelle. Si uniscono le tabelle, a volte per una sola colonna, altre volte per due o più colonne. Come si è visto, unire tabelle per più colonne è abbastanza semplice in SQL. Tuttavia, se si vuole acquisire sicurezza nell'uso di SQL JOINs, fare pratica con set di dati reali è un fattore di successo fondamentale. Vi consiglio di iniziare con questo corso interattivo di SQL JOINs che comprende 93 sfide di codifica. Copre i tipi più comuni di join come JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN, e i self-join, oltre ai join non equi. Per fare ancora più pratica con SQL JOINs e con altri strumenti SQL di base, si può prendere in considerazione l'opportunità di seguire la SQL from A to Z Il percorso. Include 7 corsi interattivi che coprono le funzioni SQL standard, i report SQL di base, le funzioni finestra, le espressioni di tabella comuni, le query ricorsive e molto altro ancora. Grazie per aver letto e buon apprendimento! Tags: sql imparare sql sql joins