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

Come unire tabelle in SQL senza usare JOIN

Ecco come è possibile unire tabelle senza la parola chiave JOIN senza la parola chiave JOIN.

Sembra che non sia possibile: unire tabelle in SQL senza usare la parola chiave JOIN. Ma l'uso della parola chiave JOIN non è l'unico modo per unire le tabelle in SQL.

In questo articolo verranno illustrati altri due metodi per unire le tabelle. Nessuno dei due richiede la parola chiave JOIN per funzionare. Si tratta di:

  1. L'uso di una virgola tra i nomi delle tabelle nella clausola FROM e la specificazione della condizione di unione in una clausola di tipo " ". WHERE
  2. Utilizzando UNION/UNION ALL.

Presumo che sappiate come funzionano le JOIN. Se ne avete bisogno, ecco un ripasso su come unire le tabelle usando le JOIN.

Il primo metodo: FROM e WHERE

Sintassi

La sintassi di questo metodo per unire le tabelle senza usare JOINè la seguente:

SELECT *
FROM , 
WHERE 

È possibile sostituire la parola chiave JOIN con una virgola nella clausola FROM. Cosa fare dopo? Non c'è la parola chiave ON per indicare la condizione di unione, come invece avviene quando si usa JOIN, ad esempio su quali due colonne si desidera unire le tabelle. In questo metodo, si utilizza semplicemente una clausola WHERE per farlo.

Questo metodo fa esattamente la stessa cosa:

SELECT *
FROM <table1> JOIN <table2>
ON <condition>

Vediamo come funziona in pratica.

Esempio

In questo esempio, ho bisogno di trovare il nome dell'artista, gli album che ha registrato e gli anni in cui sono stati registrati, per ogni artista.

Per mostrarvi come funziona questo metodo, utilizzerò due tabelle. La prima è artist:

idartist_name
1Paul Simon
2Marvin Gaye
3Bettye LaVette
4Joni Mitchell
5Sly and the Family Stone

Si tratta di una semplice tabella contenente alcuni dei miei musicisti preferiti.

L'altra tabella, albumsi presenta in questo modo:

idalbum_nameyear_recordedartist_id
1Dance to the Music19685
2Small Talk19745
3Stranger to Stranger20161
4I've Got My Own Hell to Raise20053
5Blues19714
6Court and Spark19744
7A Tribute to the Great Nat "King" Cole19652
8Graceland19861
9Still Crazy After All These Years19751
10In the Blue Light20181
11There's a Riot Goin' On19715
12The Scene of the Crime20073
13Mingus19794
14What's Going On19712
15Here, My Dear19782

Questi sono gli album registrati dai musicisti della prima tabella.

Query

La query per unire queste tabelle senza la parola chiave JOIN si presenta come segue:

SELECT
    artist_name,
    album_name,
    year_recorded
FROM artist, album
WHERE artist.id = album.artist_id;

Per prima cosa, specifico le colonne che voglio vedere nel mio risultato: artist_name, album_name, e year_recorded. Esse provengono da artist o album. Unisco queste due tabelle semplicemente elencandole nella clausola FROM e separandole con una virgola.

La clausola WHERE viene generalmente utilizzata per filtrare i risultati. Posso usarla per filtrare questo risultato in modo che mostri tutti i dati in cui la colonna id della tabella artist è uguale alla colonna artist_id della tabella album. Si può notare che la condizione in WHERE in questa query è la stessa che sarebbe dopo la parola chiave ON quando si usa JOIN: artist.id = album.artist_id.

La query equivalente con la parola chiave JOIN è la seguente:

SELECT 	artist_name,
		album_name,
		year_recorded
FROM artist
JOIN album
ON artist.id = album.artist_id;

Risultato

Entrambe le query restituiscono lo stesso risultato:

artist_namealbum_nameyear_recorded
Paul SimonIn the Blue Light2018
Paul SimonStill Crazy After All These Years1975
Paul SimonGraceland1986
Paul SimonStranger to Stranger2016
Marvin GayeHere, My Dear1978
Marvin GayeWhat's Going On1971
Marvin GayeA Tribute to the Great Nat "King" Cole1965
Bettye LaVetteThe Scene of the Crime2007
Bettye LaVetteI've Got My Own Hell to Raise2005
Joni MitchellMingus1979
Joni MitchellCourt and Spark1974
Joni MitchellBlues1971
Sly and the Family StoneThere's a Riot Goin' On1971
Sly and the Family StoneSmall Talk1974
Sly and the Family StoneDance to the Music1968

Il risultato combina i dati delle due tabelle iniziali. Ora posso vedere, ad esempio, che Paul Simon ha registrato l'album "In the Blue Light" nel 2018. Se non vi fidate della mia query, potete sempre controllare Wikipedia!

Questo metodo utilizza una colonna comune per unire le tabelle. Ricordiamo che è possibile unire anche tabelle che non hanno una colonna comune.

Il secondo metodo: UNIONE/UNIONE DI TUTTI

Sintassi

SELECT
    ,
    ,
    …
FROM 

UNION / UNION ALL

SELECT
    ,
    ,
    …
FROM 

Sia UNION che UNION ALL sono utilizzati per unire il risultato della prima query con quello della seconda. È sufficiente scrivere due istruzioni SELECT e scrivere UNION o UNION ALL tra di esse. Ma qual è la differenza tra queste due parole chiave SQL? Ricordate:

  • UNION rimuove le righe duplicate dalla query e le mostra una sola volta.
  • UNION ALL mostra tutte le righe di entrambe le tabelle, indipendentemente dal numero di duplicati.

Affinché UNION e UNION ALL funzionino, tutte le colonne delle due istruzioni SELECT devono corrispondere. Ciò significa che il numero di colonne selezionate deve essere lo stesso e i tipi di dati di tali colonne devono essere gli stessi.

Questi due operatori sono chiamati operatori di set. Leggete questo articolo per saperne di più su questi e altri operatori di set.

Esempio

Anche in questo esempio abbiamo due tabelle. La prima è denominata customer:

idfirst_namelast_name
1JimmyHellas
2FrancoisJambony
3RenataTraviata
4CarmenNaburana
5SteveInicks
6ElviraSamson
7AlpaCino
8RosaSparks
9BernardineSane
10BertRandrussell

Contiene l'elenco dei miei clienti.

La seconda tabella è supplier:

idfirst_namelast_name
1ArpadPolanski
2BillyVan Persie
3SteveInicks
4Jean-ClaudeZaandam
5EminaArkayeva
6BoMilosz
7JanWrangler
8HeinrichStroopwafel
9HerringoStarr
10JosephineMatijevic
11AlpaCino
12FlintWestwood
13DesPaulmond
14WilmaJackson
15KatrinVerson
16BertRandrussell
17CarmenNaburana
18JimmyTulp
19LuisWolf
20MirandaFanucci

Se si esaminano le tabelle più da vicino, si nota che alcune persone sono presenti in entrambe le tabelle. Per esempio, guardate Steve Inicks: significa che Steve è, insieme ad altri, sia mio cliente (acquista alcuni servizi dalla mia azienda) sia mio fornitore (mi fornisce alcuni servizi).

Vediamo ora cosa succede quando unisco queste tabelle con UNION o UNION ALL.

Query: UNIONE

Questo metodo per unire le tabelle senza usare la parola chiave JOIN si traduce nella seguente query:

SELECT 	
    first_name,
    last_name
FROM customer

UNION

SELECT	
    first_name,
    last_name
FROM supplier;

La prima istruzione SELECT seleziona le colonne first_name e last_name dalla tabella customer. La seconda istruzione SELECT fa lo stesso, ma dalla tabella supplier. Uso UNION per unire i risultati di queste due query. Funziona: ci sono due colonne in entrambe le istruzioni SELECT e sono dello stesso tipo di dati. Hanno anche lo stesso nome, anche se questo non è necessario per il funzionamento della query.

Risultato: UNION

Eseguendo la query si ottiene questo risultato:

first_namelast_name
AlpaArpad
CinoBilly
JosephineMatijevic
LuisWolf
Jean-ClaudeZaandam
SteveInicks
BillyVan Persie
EminaArkayeva
MirandaFanucci
BoMilosz
JimmyHellas
FrancoisJambony
RosaSparks
KatrinVerson
JanWrangler
BernardineSane
HeinrichStroopwafel
ElviraSamson
RenataTraviata
JimmyTulp
WilmaJackson
ArpadPolanski
BertRandrussell
DesPaulmond
FlintWestwood
CarmenNaburana
HerringoStarr

Come ho detto, si tratta di una combinazione di tutti i dati di entrambe le tabelle.

Controlliamo se ci sono duplicati. Ho detto che Steve Inicks è presente sia in customer e supplier e in entrambe le tabelle. Nel risultato della query, lo si trova solo una volta. Ho contrassegnato la riga in cui si trova.

Vediamo come questo metodo è diverso da UNION ALL.

Query: UNION ALL

La query in questo caso è:

SELECT
    first_name,
    last_name
FROM customer

UNION ALL

SELECT
    first_name,
    last_name
FROM supplier;

Come si può vedere, non è molto diversa. In effetti, si tratta della stessa query, con l'eccezione di UNION ALL al posto di UNION.

Tuttavia, i risultati sono diversi. Diamo un'occhiata.

Risultato: UNION ALL

Il risultato della query è:

first_namelast_name
JimmyHellas
FrancoisJambony
RenataTraviata
CarmenNaburana
SteveInicks
ElviraSamson
AlpaCino
RosaSparks
BernardineSane
BertRandrussell
ArpadPolanski
BillyVan Persie
SteveInicks
Jean-ClaudeZaandam
EminaArkayeva
BoMilosz
JanWrangler
HeinrichStroopwafel
HerringoStarr
JosephineMatijevic
AlpaCino
FlintWestwood
DesPaulmond
WilmaJackson
KatrinVerson
BertRandrussell
CarmenNaburana
JimmyTulp
LuisWolf
MirandaFanucci

Sapendo che Steve Inicks compare sia come cliente che come fornitore, controlliamo quante volte compare nel risultato. È presente due volte, entrambe contrassegnate in blu. Ho segnato anche altre tre persone che compaiono due volte: Alpa Cino, Bert Randrussell e Carmen Naburana.

Ecco un altro esempio di utilizzo di UNION e UNION ALL...

Sì, le tabelle possono essere unite senza la parola chiave JOIN

Come si è appena visto, non è sempre necessario usare la parola chiave JOIN per unire due tabelle in SQL.

È possibile sostituirla con una virgola nella clausola FROM e dichiarare la condizione di unione nella clausola WHERE.

L'altro metodo consiste nello scrivere due istruzioni SELECT. Il risultato di ognuna di esse è una tabella, quindi è sufficiente utilizzare UNION o UNION ALL per unire le due tabelle. Tenete presente che questo metodo funziona solo se le istruzioni SELECT hanno lo stesso numero di colonne e gli stessi tipi di dati.

Usare UNION quando non si vogliono mostrare i duplicati e UNION ALL quando si vogliono vedere i duplicati.

Imparare tutti i modi possibili per unire le tabelle in SQL

Più modi si conoscono per unire le tabelle in SQL, meglio è. Con questi due metodi e il JOIN, unire le tabelle diventa più facile. I risultati delle query sono più vicini a quelli desiderati e si ottiene di più da SQL.

Conoscere una serie di modi per unire le tabelle consente anche di movimentare un po' il codice. Può essere noioso scrivere sempre tutto allo stesso modo. Ma soprattutto, ognuno dei tre metodi è utile in situazioni diverse.

Potete imparare tutti questi metodi di unione delle tabelle nel nostro corso SQL Basics . Questo è solo un primo passo verso la padronanza di SQL from A to Z. È necessario fare molta pratica per padroneggiare l'unione delle tabelle. Forse il modo migliore è scegliere almeno un'opzione online dal nostro elenco di dieci.