28th Nov 2023 Tempo di lettura: 9 minuti Le JOIN SQL spiegate: 5 chiari esempi di INNER JOIN SQL per principianti Martyna Sławińska sql join join join Indice Unire le tabelle: Introduzione alle operazioni SQL JOIN Esempi pratici di INNER JOIN in SQL Esempio 1: Collegare libri e autori Esempio 2: Assegnare i prodotti alle categorie Esempio 3: Elenco di medici e pazienti con lo stesso nome di battesimo Esempio 4: abbinare le persone agli appartamenti adatti Esempio 5: Unire le tabelle Continenti, Paesi e Città Esempi di INNER JOIN in SQL Cercate una spiegazione chiara dei join in SQL? Date un'occhiata a questi cinque esempi di INNER JOIN in SQL! In SQL, INNER JOINpuò essere un po' difficile da padroneggiare per i principianti. Ma una volta che si inizia a lavorare con loro, si scopre che sono molto utili! Vediamo cinque esempi di INNER JOINSQL, ma prima facciamo un breve ripasso sul perché le JOIN sono importanti. Nei database relazionali, i dati sono organizzati e memorizzati all'interno di tabelle. Ogni tabella rappresenta un tipo specifico di informazione. Spesso, però, è necessario analizzare contemporaneamente dati provenienti da tabelle diverse. È qui che entrano in gioco i JOIN. Vi invitiamo a esercitarvi a unire le tabelle seguendo il nostro corso interattivo. SQL JOINs corso interattivo. Include 93 esercizi che coprono i seguenti argomenti: Tipi di JOIN SQL. JOIN multipli. Auto-giunzioni, cioè l'unione di una tabella con se stessa. JOIN non equi. Allora, siete pronti a vedere alcuni esempi di INNER JOIN? Iniziamo! Unire le tabelle: Introduzione alle operazioni SQL JOIN SQL JOINs Le operazioni di JOIN permettono di combinare i dati di due o più tabelle in base ai valori delle colonne corrispondenti. Ad esempio, è possibile unire le informazioni dei clienti con gli ordini effettuati o collegare ogni prodotto ai suoi fornitori. SQL JOINs Le operazioni di JOIN consentono di unire dati provenienti da tabelle diverse e di estrarre informazioni significative per il vostro caso d'uso specifico. Consultate questo foglio informativo sulle JOIN SQL per avere una panoramica dei diversi tipi di JOIN. Una INNER JOIN in SQL combina le righe di più tabelle facendo corrispondere i valori delle loro colonne comuni. Quando si applica una INNER JOIN per collegare i dati dei clienti con gli ordini corrispondenti, si vedrà un elenco di clienti che hanno effettuato almeno un ordine. Oltre a INNER JOIN, SQL offre anche altri tipi di join: LEFT JOIN, RIGHT JOIN e FULL JOIN. Queste unioni sono chiamate OUTER JOIN. A differenza di INNER JOIN, un'operazione OUTER JOIN può elencare le righe di entrambe le tabelle, anche se non c'è corrispondenza. Vediamo un esempio per capire meglio la natura di SQL INNER JOIN. Ecco la tabella customers che memorizza le informazioni sui clienti: customer_idfirst_namelast_nameemail 1CoryCastillocc@email.com 2ElliePottsep@email.com 3JackGreerjg@email.com Ed ecco la tabella orders che memorizza tutti gli ordini effettuati dai clienti: order_idcustomer_idorder_dateorder_amount 2716/6/2023100.00 2827/7/2023150.00 2918/8/202320.00 La colonna comune (evidenziata in rosa) su cui si basano le tabelle customers e orders sono unite è la colonna customer_id. Ecco la query: SELECT c.customer_id, c.email, o.order_date, o.order_amount FROM customers AS c INNER JOIN orders AS o ON c.customer_id = o.customer_id; Questa query unisce la tabella customers (alias AS c) e la tabella orders (alias AS o). Questi alias di tabella forniscono un modo chiaro per informare il database della tabella di origine di ciascuna colonna (utilizzando la sintassi table_alias.column_name). Questi alias vengono utilizzati nella clausola ON per stabilire la colonna per l'unione delle tabelle. Vengono utilizzati anche nell'istruzione SELECT, dove vengono selezionate due colonne dalla tabella clienti (c.customer_id and c.email) e altre due colonne dalla tabella orders tabella (o.order_date and o.order_amount). Ecco l'output della query: customer_idemailorder_dateorder_amount 1cc@email.com6/6/2023100.00 2ep@email.com7/7/2023150.00 1cc@email.com8/8/202320.00 Si può notare che il cliente con ID 3 non compare nella tabella risultante. Questo particolare cliente non ha ancora effettuato alcun ordine e quindi non ha alcun record corrispondente nella tabella. orders tabella. La parola chiave INNER JOIN è intercambiabile con la parola chiave JOIN. In altre parole, quando si usa JOIN, il database la interpreta come una notazione abbreviata per INNER JOIN. Per saperne di più su INNER JOIN, consultate il nostro articolo Cos'è una giunzione interna in SQL. Esempi pratici di INNER JOIN in SQL Vediamo alcuni esempi di SQL INNER JOIN adatti ai principianti. Prima di passare agli esempi, date un'occhiata a questo articolo su come esercitarsi con SQL JOINs. Esempio 1: Collegare libri e autori Esistono due tabelle che contengono informazioni su libri e autori. Unite queste tabelle per vedere l'elenco dei libri e dei loro autori. Ecco la books tabella: book_idtitlepublication_yearauthor_id 1Frankenstein181822 2The Time Machine189523 3The Martian201124 42001: A Space Odyssey196825 5Dune196526 La colonna book_id identifica in modo univoco ogni libro. La colonna author_id assegna un autore a ciascun libro. Ed ecco la authors tabella: author_idauthor_name 22Mary Shelley 23H. G. Wells 24Andy Weir 25Arthur C. Clarke 26Frank Herbert La colonna author_id identifica univocamente ogni autore. La colonna author_name contiene i nomi completi degli autori. Se si desidera visualizzare i titoli dei libri e i nomi degli autori, è possibile unire queste tabelle in base alla loro colonna comune (la colonna author_id in entrambe le tabelle). Basta selezionare title da books e author_name da authors: SELECT b.title, a.author_name FROM books AS b INNER JOIN authors AS a ON b.author_id = a.author_id; Questa è la tabella risultante: titleauthor_name FrankensteinMary Shelley The Time MachineH. G. Wells The MartianAndy Weir 2001: A Space OdysseyArthur C. Clarke DuneFrank Herbert Si noti che a ogni libro è assegnato un autore e a ogni autore è assegnato un libro, poiché non ci sono valori duplicati nella colonna comune author_id. Esaminare l'esempio successivo per vedere cosa succede se la colonna comune ha valori duplicati. Esempio 2: Assegnare i prodotti alle categorie Esistono due tabelle che memorizzano prodotti e categorie di prodotti. Unire queste tabelle per visualizzare l'elenco dei prodotti con le relative categorie. Ecco la products tabella: product_idproduct_namecategory_id 1Apple22 2Orange22 3Potato23 4Carrot23 5Chocolate24 La colonna product_id identifica in modo univoco ogni prodotto. La colonna category_id assegna una categoria a ciascun prodotto. Ed ecco la categories tabella: category_idcategory_name 22Fruits 23Vegetables 24Snacks La colonna category_id identifica in modo univoco ogni categoria. La colonna category_name memorizza i nomi completi delle categorie. Se si desidera visualizzare i prodotti e le loro categorie, è possibile unire queste tabelle in base alla loro colonna comune, che è la colonna category_id. Ecco la query: SELECT p.product_name, c.category_name FROM products AS p INNER JOIN categories AS c ON p.category_id = c.category_id; Questa è la tabella risultante: product_namecategory_name AppleFruits OrangeFruits PotatoVegetables CarrotVegetables ChocolateSnacks Le categorie con ID 22 e 23 sono assegnate a due prodotti ciascuna; i loro nomi compaiono due volte nella tabella di output. Esempio 3: Elenco di medici e pazienti con lo stesso nome di battesimo Si dispone di due tabelle che memorizzano informazioni su medici e pazienti. Unire queste tabelle per visualizzare l'elenco dei medici e dei pazienti che hanno lo stesso nome di battesimo. Ecco la doctors La colonna identifica in modo univoco i medici e i pazienti con lo stesso nome di battesimo: doctor_idfirst_namelast_name 1SamanthaMonroe 2MelvinFerrell 3AlbieBlake 4RoseBernard 5LouiPeterson La colonna doctor_id identifica in modo univoco ogni medico. Le altre due colonne contengono il nome e il cognome dei medici. Ed ecco la patients tabella: patient_idfirst_namelast_name 23BenWoodward 24SamanthaThomson 25KateDonovan 26AlbieVasquez 27LouiChen La colonna patient_id identifica in modo univoco ogni paziente. Le altre due colonne contengono il nome e il cognome dei pazienti. Se si desidera visualizzare l'elenco dei medici e dei pazienti che condividono lo stesso nome, è possibile unire queste tabelle in base alla colonna first_name. SELECT d.*, p.* FROM doctors AS d INNER JOIN patients AS p ON d.first_name = p.first_name; Si noti che d.* definisce tutte le colonne della tabella doctors e p.* definisce tutte le colonne della tabella patients della tabella. Questa è la tabella risultante: doctor_idfirst_namelast_namepatient_idfirst_namelast_name 1SamanthaMonroe24SamanthaThomson 3AlbieBlake26AlbieVasquez 5LouiPeterson27LouiChen Grazie all'operazione INNER JOIN, è possibile elencare solo le coppie di medici e pazienti in cui i nomi sono uguali. Esempio 4: abbinare le persone agli appartamenti adatti Sono state create due tabelle che contengono informazioni sugli appartamenti disponibili per l'affitto e sulle persone in cerca di appartamenti adatti alla loro fascia di prezzo. Unire queste tabelle per vedere quali appartamenti possono essere affittati da quale persona. Ecco la apartments tabella: apartment_idrent 11000 2700 3500 La colonna apartment_id identifica in modo univoco ogni appartamento. La colonna rent contiene l'importo mensile dell'affitto. Ed ecco la persons tabella: person_idemailmax_rent 23ab@email.com900 24cd@email.com600 25ef@email.com3000 La colonna person_id identifica in modo univoco ogni persona che sta cercando un appartamento in affitto. La colonna email memorizza le loro e-mail e la colonna max_rent memorizza l'importo massimo dell'affitto mensile che sono in grado di pagare per l'appartamento. Se si vuole vedere quali appartamenti possono essere affittati da quale persona, si possono unire queste tabelle in base alle colonne rent e max_rent: SELECT p.person_id, p.email, a.apartment_id, a.rent AS apartment_rent FROM apartments AS a INNER JOIN persons AS p ON a.rent < p.max_rent; In questo caso la corrispondenza deve essere fatta tra la colonna affitto della tabella apartments e la colonna max_rent della tabella persons tabella, dove rent < max_rent. Questa è la tabella risultante: person_idemailapartment_idapartment_rent 25ef@email.com11000 23ab@email.com2700 25ef@email.com2700 23ab@email.com3500 24cd@email.com3500 25ef@email.com3500 Utilizzando la clausola ON con la condizione contenente il segno <, più righe della tabella sono state assegnate a più righe della tabella . apartments sono state assegnate a più righe della tabella persons e viceversa. E si può vedere quali appartamenti sono adatti all'affitto per quali persone. Esempio 5: Unire le tabelle Continenti, Paesi e Città Questa volta abbiamo tre tabelle che contengono informazioni su continenti, Paesi e città. Unite queste tabelle per sapere quale città appartiene a quale Paese e quale Paese appartiene a quale continente. Ecco la continents che memorizza tutti i continenti: continent_idcontinent_name 1Asia 2Africa 3North America 4South America 5Antarctica 6Europe 7Australia La colonna continent_id identifica in modo univoco ogni continente. La colonna continent_name contiene il nome completo del continente. Ecco la tabella countries tabella che memorizza i Paesi selezionati: country_idcountry_namecontinent_id 23United States3 24Brazil4 25South Africa2 26Japan1 27Poland6 La colonna country_id identifica in modo univoco ogni Paese. La colonna country_name memorizza il nome completo. La colonna continent_id memorizza il continente in cui si trova il Paese. Ed ecco la tabella cities che contiene le città selezionate: city_idcity_namecountry_id 33Rio de Janeiro24 34New York23 35Tokyo26 36Warsaw27 37Cape Town25 La colonna city_id identifica in modo univoco ogni città. La colonna city_name memorizza il nome completo. La colonna country_id memorizza il paese in cui si trova la città. Se si vuole vedere quali città, paesi e continenti vanno insieme, è possibile unire queste tre tabelle in base alle loro colonne comuni: SELECT cont.continent_name, coun.country_name, ci.city_name FROM continents AS cont INNER JOIN countries AS coun ON cont.continent_id = coun.continent_id INNER JOIN cities AS ci ON coun.country_id = ci.country_id; La tabella continent è unita alla tabella countries sulla colonna comune (continent_id). E la countries è unita alla tabella cities tabella sulla loro colonna comune (country_id). Questa è la tabella risultante: continent_namecountry_namecity_name AsiaJapanTokyo AfricaSouth AfricaCape Town North AmericaUnited StatesNew York South AmericaBrazilRio de Janeiro EuropePolandWarsaw Le tre tabelle sono unite sulle loro colonne comuni e l'istruzione SELECT elenca i nomi dei continenti, dei paesi e delle città in base al join tra le colonne ID. Consultate questo articolo sull'unione di tre o più tabelle in SQL per altri esempi di unione di più tabelle. Esempi di INNER JOIN in SQL In questo articolo abbiamo approfondito le complessità di INNER JOIN in SQL, dai concetti di base agli scenari più avanzati. Abbiamo utilizzato diverse condizioni di JOIN e abbiamo persino unito tre tabelle. Come abbiamo visto, la potenza di INNER JOIN risiede nella sua capacità di collegare senza problemi i set di dati, consentendoci di estrarre preziose informazioni. Avete bisogno di altri esempi di SQL INNER JOIN? Mettetevi alla prova con tutti i tipi di JOIN seguendo il nostro corso su SQL JOINs di cui abbiamo parlato prima. Avrete a disposizione tutta la pratica di cui avete bisogno per scrivere JOIN a vostro agio. Buona fortuna! Tags: sql join join join