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

JOIN SQL per principianti

Probabilmente avete già familiarità con semplici query SQL, come SELECT * FROM table. Ora vi state chiedendo cosa fare quando avete più tabelle e volete unirle. Esattamente! JOIN è la chiave. In questo tutorial di SQL JOINs per principianti, imparerete a collegare i dati di più tabelle.

Cosa sono le SQL JOINs?

I database di solito hanno più di una tabella. JOINs è una costruzione SQL utilizzata per unire i dati di due o più tabelle. Quando si desidera utilizzare le colonne di due tabelle in una tabella di risultati, il modo più semplice per farlo è scrivere una query JOIN.

La sintassi di una query SQL JOIN è la seguente:

SELECT * 
FROM table1
JOIN table2
  ON table1.id1=table2.id2

Poiché questo è un tutorial di SQL JOINs per principianti, iniziamo con le basi. Esamineremo gli elementi singolarmente.

Dopo la parola chiave FROM, si scrive il nome della prima tabella da cui si vogliono prelevare le colonne. Poi si usa la parola chiave JOIN, seguita dal nome della seconda tabella che si vuole usare.

Successivamente, l'istruzione ON indica alla query su quali colonne i dati devono essere uniti. (Di solito si tratta di ID). Nella sintassi sopra riportata, si uniscono le tabelle usando id1 da table1 e id2 da table2. Questo si scrive come table1.id1 e table2.id2 - dopo il nome della tabella c'è un punto e poi il nome della colonna.

È bene chiarire che le colonne su cui si uniscono i dati non sono sempre sotto forma di ID. Non è necessario che abbiano lo stesso nome. Ad esempio, è possibile unire due tabelle basate su chiavi chiamate orders.post_code e cities.zip_code. Come si può notare, non si tratta di un ID e anche i nomi delle colonne per i codici postali sono diversi. Tuttavia, entrambe le colonne contengono codici postali; per creare una JOIN SQL sono necessari due campi corrispondenti.

GIUNTA INTERNA

Continuiamo con la nostra guida a SQL JOINs per i principianti. Vedremo come SQL JOINs con un semplice esempio. Supponiamo di voler scoprire quale artista ha registrato una certa canzone. In questo modello di dati di base, ci sono solo due tabelle: song e artist. La tabella song contiene le colonne song_id, song_title e artist_id. La tabella artist è composta da artist_id e artist_name. Come si può notare, artist_id è presente in entrambe le tabelle; possiamo usarlo per unirle.

tab-1

La più semplice JOIN (detta anche INNER JOIN) prende la tabella di sinistra e confronta le informazioni per ogni riga della tabella di destra usando artist_id. Così, la prima canzone, "Dancing Queen", ha un artist_id uguale a "04"; nella tabella artist, "04" è assegnato a "ABBA".

Come si può vedere nella tabella artist, non c'è un artist_id uguale a "06", che è assegnato alla canzone "Rolling in the Deep". Nella tabella dei risultati sono mostrati solo i brani a cui corrisponde un artist_name. Inoltre, non ci sono canzoni di Michael Jackson nella tabella dei risultati, perché non c'è nessuna canzone di questo tipo nella tabella song.

Ricordate che INNER JOIN seleziona tutte le righe da entrambe le tabelle , purché ci sia una corrispondenza tra le colonne di entrambe le tabelle.

Ecco il codice:

SELECT *
FROM song
JOIN artist
  ON song.artist_id=artist.artist_id
tab-2

GIUNTA SINISTRA

Il secondo tipo di join di cui parleremo in questo tutorial SQL JOINs per principianti è il LEFT JOIN. Esso prende sempre la prima tabella (cioè la tabella subito dopo la parola chiave FROM ) come un insieme (tutti i record della prima tabella). Prende solo i record corrispondenti della seconda tabella. Se non ci sono informazioni corrispondenti, viene restituito il valore NULL. Ciò significa che non ci sono informazioni disponibili per quel particolare ID.

Guardate di nuovo la tabella artist. Non c'è nessun artist_name con un artist_id uguale a "06". Questo è il motivo per cui il brano "Rolling in the deep" non compare nei risultati della query INNER JOIN. Mentre è elencata nell'esempio LEFT JOIN qui sotto, ha valori NULL per artist_id e artist_name.

Ecco l'istruzione SQL LEFT JOIN:

SELECT *
FROM song
LEFT JOIN artist
  ON song.artist_id=artist.artist_id
tab-3

GIUNTA A DESTRA

Il prossimo tipo di join nel nostro tutorial SQL JOINs per principianti è RIGHT JOIN. A differenza di LEFT JOIN, prende tutti i record della seconda tabella (quella immediatamente dopo la parola chiave JOIN ) e solo i record della prima tabella che hanno artist_idvalori corrispondenti. In questo caso, non ci sono canzoni di Michael Jackson nel database, quindi ci sono NULLs per quelle song_ids, song_titles e artist_ids. E ora "Rolling in the Deep" è scomparsa, poiché nella tabella di destra (artist) non c'è artist_id uguale a "06".

Ecco il codice:

SELECT *
FROM song
RIGHT JOIN artist
  ON song.artist_id=artist.artist_id
tab-4

GIUNTA COMPLETA

L'ultimo tipo di JOIN di cui parleremo nella nostra guida SQL JOINs per principianti è il FULL JOIN. Si tratta di una combinazione di LEFT JOIN e RIGHT JOIN, poiché prende tutti i record da entrambe le tabelle e inserisce i valori NULL dove mancano le informazioni dalla tabella corrispondente. Nell'esempio seguente, è possibile vedere NULLs per artist_id uguale a "06" (sì, dovrebbe essere Adele!) e NULLs per le canzoni di Michael Jackson con artist_id uguale a "05".(Sì, "Billie Jean" esiste, ma SQL non lo sa).

SELECT *
FROM song
FULL JOIN artist
  ON song.artist_id=artist.artist_id
tab-5

Esempio di vita reale: Negozi e prodotti

Ora mostreremo come utilizzare SQL JOINs in un esempio commerciale reale. Questa volta, il nostro tutorial su SQL JOINs per i principianti utilizzerà un esempio tratto dal settore della vendita al dettaglio. Immaginate di gestire un negozio e di voler vedere quali prodotti sono esauriti. Volete anche verificare se il vostro gestore di database mantiene l'ordine. Supponiamo che il database abbia solo due tabelle: product e stock.

tab-6

Come si può vedere, la prima tabella (product) ha due colonne: product_id e product_name. Se tutto è in ordine, dovrebbero esserci un ID e un nome per tutti i prodotti che abbiamo venduto. La seconda tabella (stock) rappresenta lo stock attuale che abbiamo nel negozio - ad esempio, ci sono sette articoli per il valore product_id di "100".

Osservate attentamente la colonna product_id in entrambe le tabelle. Alcuni identificatori sono presenti in entrambe le tabelle(102, 105, 107), altri solo in quella di sinistra(101, 103, 106) e altri ancora solo in quella di destra(100, 104). Queste informazioni saranno utilizzate negli esempi che seguono.

Ignorare le informazioni mancanti

Quando si vogliono vedere solo i prodotti attualmente in magazzino e si conoscono già tutti i loro nomi, si può usare l'istruzione INNER JOIN. Essa seleziona solo i record con un id presente in entrambe le tabelle che vogliamo unire. Il risultato è un elenco di tre nomi di prodotti e delle loro quantità. Come si può vedere, si possono usare entrambe le istruzioni JOIN e INNER JOIN per fare la stessa cosa. JOIN è un'abbreviazione di INNER JOIN. Gli altri JOINdevono essere specificati esplicitamente.

UNA GIUNZIONE INTERNA

SELECT
  product_name,
  stock.product_id,
  quantity
FROM products
INNER JOIN stock
  ON product.product_id = stock.product_id
tab-7

Quali prodotti devono essere ordinati?

Supponiamo di voler verificare quali prodotti sono esauriti e devono essere riordinati. Per farlo, utilizzeremo una LEFT JOIN per abbinare i record della tabella product alla tabella stock. Possiamo visualizzare questa operazione come se mettessimo la tabella product a sinistra e la tabella stock a destra. Poi cerchiamo i record in entrambe le tabelle che corrispondono a product_id. I record senza campi corrispondenti a product_id ricevono un NULL. (Vedere la tabella dei risultati qui sotto).

UNA GIUNZIONE SINISTRA

SELECT
  product_name,
  stock.product_id,
  quantity
FROM products
LEFT JOIN stock
  ON product.product_id = stock.product_id
tab-8

Nella tabella stock non ci sono valori product_id uguali a "101", "103" o "106". Ecco perché la tabella mostra NULLper succo d'arancia, caffè e cereali. Questi sono i prodotti che dobbiamo ordinare.

Sappiamo cosa vendiamo?

Il ruolo del gestore di database è quello di mantenere in ordine tutto ciò che è contenuto nei nostri database. Supponiamo di voler verificare se sta facendo un buon lavoro. Verificheremo se la tabella product viene aggiornata con nuovi prodotti. A tale scopo, utilizzeremo una tabella RIGHT JOIN.

RIGHT JOIN prende tutti i record della tabella stock e li mette a destra (proprio come suggerirebbe RIGHT JOIN ). Quindi, vengono visualizzati solo i record della tabella product che hanno una corrispondenza con product_id.

UNA GIUNZIONE A DESTRA

SELECT
  product_name,
  stock.product_id,
  quantity
FROM products
RIGHT JOIN stock
  ON product.product_id = stock.product_id
tab-9

Mostrare tutto ciò che è disponibile

Per avere un quadro completo della situazione, potremmo voler vedere tutti i nomi dei prodotti e tutte le loro quantità in entrambe le tabelle. In questo modo possiamo vedere quali prodotti devono essere riordinati e quali product_idmancano di un product_name. A questo scopo, FULL JOIN è utile! Prende tutti i record dalla tabella di sinistra (product) e tutti i record dalla tabella di destra (stock) e abbina solo i record che hanno lo stesso id (product_id); inserisce un NULL a destra se manca un product_name o a sinistra se non ci sono articoli in magazzino.

GIUNZIONE COMPLETA

SELECT
  product_name,
  stock.product_id,
  quantity
FROM products
FULL JOIN stock
  ON product.product_id = stock.product_id
tab-10

Volete saperne di più su SQL JOINs?

Potete trovare altri esempi di utilizzo di SQL JOINs sul nostro canale YouTube - We Learn SQL. Dateci un'occhiata e ricordatevi di iscrivervi.

Spero che questa rapida SQL JOINs tutorial per principianti vi abbia aiutato a capire come unire i dati di due tabelle. Se desiderate maggiori informazioni, vi consiglio di iscrivervi alla LearnSQL.it, dove potrete imparare a utilizzare SQL (e molto altro!) per gestire i database. Gli argomenti sono presentati in modo semplice e molto comprensibile. Provate oggi stesso i corsi SQL di LearnSQL.it!