Torna all'elenco degli articoli Articoli
Tempo di lettura: 9 minuti

Le JOIN SQL spiegate: 5 chiari esempi di INNER JOIN SQL per principianti

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.

Esempi di INNER JOIN in SQL per principianti

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.

Esempi di INNER JOIN in SQL per principianti

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!