9th Dec 2022 Tempo di lettura: 8 minuti SQL INNER JOIN spiegato in parole semplici Ignacio L. Bisso nozioni di base di sql sql imparare sql Indice Un database di un'agenzia di viaggi La prima JOIN SQL: ottenere i pacchetti di viaggio che includono le città di mare In questo articolo tratterò l'elemento forse più importante del linguaggio SQL. Proprio così! Sto parlando della clausola SQL INNER JOIN. Come sapete, in un database i dati sono memorizzati in diverse tabelle. Nel mio ultimo articolo ho spiegato come creare query SQL quando i dati necessari si trovano in una sola tabella. Ma cosa succede se i dati necessari si trovano in due tabelle? In questo caso, è necessario utilizzare una clausola JOIN per combinare le due tabelle, che è qualcosa di simile al collegamento di entrambe le tabelle. In questo articolo spiegherò la clausola SQL INNER JOIN con parole semplici e con alcuni esempi di facile comprensione. Un database di un'agenzia di viaggi Forse sapete già che in un database i dati sono memorizzati in tabelle. Supponiamo di lavorare per un'agenzia di viaggi e che il database dell'agenzia abbia due tabelle: TRAVEL_PACK e CITIES. Nell'immagine seguente potete vedere il database, naturalmente non tutti i dati sono mostrati. Esempio di TRAVEL_PACK Tabella PACK_NAMEBEST_SEASONPRICEDURATION United States: Big CitiesAll year$3500.0010 days United States: West CoastMarch to May$3700.0012 days South American TourAugust to November$1850.0018 days Beaches of BrazilDecember to March$2200.007 days Esempio di CITIES Tabella NAMETYPE_OF_CITYPACK_NAMEDAYS_STAYING San FranciscohistoricalUnited States: West Coast5 WashingtonhistoricalUnited States: Big Cities3 New YorkbusinessUnited States: Big Cities7 Rio de JaneirobeachBeaches of Brazil4 UshuaiamountainSouth American Tour3 Salvador de BahiabeachBeaches of Brazil3 Los AngelesbeachUnited States: West Coast7 Nota bene: per utilizzare una clausola JOIN per combinare due tabelle, è necessario che vi sia un campo o una colonna presente in entrambe le tabelle. Nel database di esempio questo campo è il nome del pacchetto di viaggio. Come si può vedere nella tabella TRAVEL_PACK il nome del pacchetto si trova sotto la colonna PACK_NAMEe nella tabella CITIES tabella il nome del pacchetto è nella colonna PACK_NAME e anche nella tabella il nome del pacchetto è nella colonna È facile notare che entrambe le colonne hanno lo stesso nome, ma in altri database può essere diverso. In altre parole, quando si utilizza una clausola INNER JOIN, il nome della colonna comune può essere diverso in entrambe le tabelle oppure no. In ogni caso, ricordate il nome della colonna PACK_NAMEperché vi servirà in seguito per scrivere la clausola JOIN. La prima JOIN SQL: ottenere i pacchetti di viaggio che includono le città di mare Di solito consiglio di iniziare pensando a dove si trovano i dati di cui si ha bisogno per la query. In questo caso è chiaro che si avrà bisogno della tabella TRAVEL_PACK per ottenere i nomi dei pacchetti, ma allo stesso tempo sarà necessaria anche la tabella CITIES perché si deve verificare se la città è una città balneare o meno. Quindi, i dati necessari per questa query si trovano in due tabelle, motivo per cui è necessario utilizzare una JOIN SQL. Quando si devono ottenere dati da due (o più) tabelle, è necessario utilizzare un SQL JOIN. L'SQL JOIN agisce come un connettore tra due tabelle, creando coppie di record. In pratica, prende due record (uno da ciascuna tabella) e li unisce in una coppia di record. Questo tipo di unione si chiama INNER JOIN e in SQL i termini JOIN e INNER JOIN sono esattamente la stessa cosa. Per i lettori che vogliono approfondire, esistono altri tipi di join SQL, ad esempio l'opposto del join INNER è un altro tipo di join chiamato LEFT join o OUTER LEFT join, e si possono trovare anche altri tipi di join come RIGHT join, NATURAL join e LATERAL join tra gli altri. Potete imparare molti di questi tipi di join SQL nel corso online SQL JOINs . Tuttavia, in questo articolo mi concentrerò sulla INNER JOIN, che è davvero potente! La prossima immagine mostra come la clausola JOIN crea una coppia di record: (fare clic per ingrandire) Ora mostrerò la sintassi per implementare una INNER JOIN, utilizzando il seguente schema FROM table1 INNER JOIN table2 ON common column in table1 = common column in table2 Se riempite il modello con le vostre tabelle di esempio e i nomi delle colonne, otterrete la prossima clausola INNER JOIN: FROM CITIES INNER JOIN TRAVEL_PACK ON CITIES.PACK_NAME = TRAVEL_PACK.PACK_NAME DA CITTÀ Una volta completata la clausola FROM con l'INNER JOIN, si può continuare a lavorare sulle clausole SELECT e WHERE della query. La clausola SELECT è facile perché è sufficiente restituire la colonna NAME, quindi la clausola sarà: SELECT TRAVEL_PACK.PACK_NAME Si noti che il riferimento alla colonna PACK_NAME viene fatto aggiungendo un prefisso al nome della tabella (TRAVEL_PACK in questo caso). Questa è una buona pratica da applicare quando la query coinvolge più di una tabella. Nella clausola WHERE è necessario filtrare i risultati per includere solo le città balneari. La clausola sarà quindi:: WHERE CITIES.TYPE_OF_CITY = 'beach' Infine, se si mettono insieme tutte le clausole, la query sarà: SELECT TRAVEL_PACK.PACK_NAME FROM CITIES JOIN TRAVEL_PACK ON CITIES.PACK_NAME = TRAVEL_PACK.PACK_NAME WHERE CITIES.TYPE_OF_CITY = 'beach' Di seguito è riportato il risultato della query precedente: NAME Los Angeles Salvador de Bahia Rio de Janeiro La prossima join: le città incluse nei pacchetti di viaggio che costano meno di 2500 dollari Anche in questo caso, come per la query precedente, è necessario accedere a due tabelle, utilizzando un JOIN per le colonne CITIES e TRAVEL_PACK per le tabelle. Si noti che uso il termine JOIN invece di INNER JOIN perché entrambi sono esattamente la stessa cosa in SQL. Dalla query precedente si sa già come creare la clausola JOIN. Le modifiche riguardano le clausole SELECT e WHERE, come si vedrà nei paragrafi seguenti. La clausola select è semplice, perché serve solo il nome della città: SELECT CITY.NAME Nella clausola where è necessario filtrare in base al prezzo del pacchetto di viaggio, quindi la clausola WHERE sarà: WHERE TRAVEL_PACK.PRICE <= 2500 La query completa sarà quindi la seguente: SELECT CITY.NAME FROM CITIES JOIN TRAVEL_PACK ON CITIES.PACK_NAME = TRAVEL_PACK.PACK_NAME WHERE TRAVEL_PACK.PRICE <= 2500 Il risultato della query precedente sarà: NAME Rio de Janeiro Ushuaia Salvador de Bahia Immersione profonda: INNER JOIN per tre tabelle È possibile utilizzare una INNER JOIN con più di due tabelle? Certo che sì. Inoltre, è possibile utilizzare una clausola JOIN con tutte le tabelle che si desidera. Tuttavia, è necessario ricordare che ogni clausola di JOIN SQL è valida solo per una singola coppia di tabelle. Quindi, se avete tre tabelle da unire, come T1, T2 e T3, avrete bisogno di due clausole SQL JOIN, come si può vedere nell'esempio seguente: FROM T1 JOIN T2 ON ...... JOIN T3 ON ....... Ho lasciato la clausola ON vuota perché spiegherò questa parte con l'esempio seguente. Si supponga di estendere il database dell'agenzia aggiungendo una nuova tabella chiamata STATI, in cui si intende memorizzare gli stati, le regioni o le province di ciascun Paese. Il database con tre tabelle sarà come nella figura seguente: TRAVEL_PACK Tabella PACK_NAMEBEST_SEASONPRICEDURATION United States: Big CitiesAll year$3500.0010 days United States: West CoastMarch to May$3700.0012 days South American TourAugust to November$1850.0018 days Beaches of BrazilDecember to March$2200.007 days STATES Tabella NAMECOUNTRYPOPULATIONLANGUAGE New YorkUnited States17000000english Tierra del FuegoArgentina190000spanish CaliforniaUnited States13400000english Rio de JaneiroBrasil15000000portuguese BahiaBrasil8000000portuguese CITIES Tabella NAMETYPE_OF CITYPACK_NAMEDAYS_STAYSTATE San FranciscohistoricalUnited States: West Coast5California WashingtonhistoricalUnited States: Big Cities3Washington New YorkbusinessUnited States: Big Cities7New York Rio de JaneirobeachBeaches of Brazil4Rio de Janeiro UshuaiamountainSouth American Tour3Tierra del Fuego Salvador de BahiabeachBeaches of Brazil3Bahia Los AngelesbeachUnited States: West Coast7California Supponiamo di dover ottenere un report con un elenco di tutte le città con lo stato, il nome del pacchetto e la lingua utilizzata nella città negli stati in cui la lingua è lo spagnolo o il portoghese. È chiaro che è necessario unire le tabelle CITIES e STATES e poi unire il risultato anche con la tabella TRAVEL_PACK tabella. Si può iniziare applicando quanto appreso negli esempi precedenti. Innanzitutto, utilizzare una clausola JOIN per combinare la tabella CITIES con la tabella STATES. È chiaro che è necessario utilizzare le colonne CITIES.STATE e STATE.NAME nella clausola ON. La clausola from sarà quindi la seguente: FROM CITIES JOIN STATES ON CITIES.STATE = STATES.NAME Successivamente, è necessario aggiungere la terza tabella alla clausola JOIN, ovvero la tabella TRAVEL_PACK. Si è già appreso come unire questa tabella in un esempio precedente, quindi il JOIN completo sarà: FROM CITIES JOIN STATES ON CITIES.STATE = STATES.NAME JOIN TRAVEL_PACK ON CITIES.PACK_NAME = TRAVEL_PACK.PACK_NAME Aggiungendo le clausole SELECT e WHERE, la query completa sarà la seguente: SELECT CITIES.NAME, STATES.NAME, TRAVEL_PACK.PACK_NAME, STATES.LANGUAGE FROM CITIES JOIN STATES ON CITIES.STATE = STATES.NAME JOIN TRAVEL_PACK ON CITIES.PACK_NAME = TRAVEL_PACK.PACK_NAME WHERE STATES.LANGUAGE IN ('spanish','portuguese') E il risultato sarà: NAMENAMEPACK_NAMELANGUAGE SalvadorBahiaBeaches of Brazilportuguese Rio de JaneiroRio de JaneiroBeaches of Brazilportuguese UshuaiaTierra del FuegoSouth American Tourspanish Passi successivi per continuare a imparare In questo articolo ho spiegato come unire le tabelle in SQL. Ho spiegato con degli esempi cos'è un INNER JOIN in SQL e come funziona la clausola JOIN. La clausola JOIN apre un mondo enorme di nuove possibilità in SQL. Pensate che qualsiasi persona non tecnica in grado di utilizzare la clausola JOIN nelle query SQL ha un valore aggiunto come dipendente, indipendentemente dall'area aziendale in cui lavora. Approfondite la conoscenza di SQL JOINs e diventate un solido collaboratore della vostra azienda! Tags: nozioni di base di sql sql imparare sql