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

Come unire le tabelle in SQL

Avete bisogno di visualizzare dati memorizzati in tabelle diverse? Allora è il momento di usare SQL JOIN! Questo argomento può essere ostico per i principianti, perciò ho preparato questa guida completa, passo dopo passo, sull'unione di tabelle in SQL.

Spesso le informazioni che si desidera visualizzare sono memorizzate in diverse tabelle. In questi casi, è necessario unire le tabelle specificando quali righe devono essere combinate con altre. Questo è esattamente ciò che fa JOIN. La clausola JOIN in SQL serve a combinare le righe di una o più tabelle in base al valore di una colonna comune.

Per esempio, supponiamo di fare una ricerca sull'architettura moderna e di avere le tabelle buildings, architects, e building_restorations:

buildings
idnamelocationyeararchitect_id
124Fallingwater HouseMill Run, PA, USA193511
231Barcelona PavilionBarcelona, Spain192915
764Villa DirickzBrussels, Belgium193318
850Guggenheim MuseumNew York, NY, USA195911
894Neue NationalgalerieBerlin, Germany196815

architects
idnameyear_of_birthyear_of_death
11Frank Lloyd Wright18671959
15Ludwig Mies Van der Rohe18861969
18Marcel Leborgne18981978

building_restorations
idbuilding_idarhitect_idrestoration_year
1124112001
2231151986
3850112008
4894152021

Supponiamo ora di voler elencare gli edifici con i rispettivi architetti. Si noti che i nomi degli edifici e degli architetti sono memorizzati in tabelle diverse. Tuttavia, abbiamo la colonna architect_id nella tabella buildings e la colonna id nella tabella architects nella tabella. Possiamo unire queste due tabelle in base a queste colonne correlate. Ecco la query:

SELECT buildings.name, architects.name
FROM buildings
JOIN architects
ON buildings.architect_id = architects.id;

Per prima cosa specifichiamo le colonne che vogliamo visualizzare nella clausola SELECT. Quindi, uniamo le tabelle specificando una tabella nella clausola FROM, un'altra tabella nella clausola JOIN e le colonne correlate nella clausola ON. Ecco l'output:

namename
Guggenheim MuseumFrank Lloyd Wright
Fallingwater HouseFrank Lloyd Wright
Neue NationalgalerieLudwig Mies Van der Rohe
Barcelona PavilionLudwig Mies Van der Rohe
Villa DirickzMarcel Leborgne

Non preoccupatevi se l'unione di tabelle in SQL vi sembra confusa. La sintassi di SQL JOIN verrà illustrata più avanti. Potete anche fare più pratica con SQL JOIN in questo corso interattivo.

Passo dopo passo attraverso SQL JOIN

I database relazionali comprendono più tabelle che memorizzano informazioni diverse. Poiché l'analisi dei dati implica la possibilità di ricavarne informazioni analizzandole da diversi punti di vista, l'unione di tabelle è molto comune in SQL. Tuttavia, molti principianti trovano questo argomento ostico.

Se siete alle prime armi con SQL JOIN, potreste trovare utile questa guida illustrata alla INNER JOIN di SQL, che è il tipo di JOIN di base.

Ma ora facciamo una visita guidata alla sintassi delle JOIN.

Passo 1. Identificare le tabelle da unire

Si inizia sempre identificando le tabelle che contengono le informazioni da visualizzare. Nell'esempio precedente, volevamo visualizzare i nomi degli edifici insieme ai nomi dei loro architetti. Poiché i nomi degli edifici sono memorizzati nella tabella buildings e i nomi degli architetti sono memorizzati nella tabella architects abbiamo unito le due tabelle per visualizzare le informazioni necessarie.

Un altro esempio potrebbe essere quello di elencare i restauri, in particolare il nome dell'edificio e l'anno del restauro. Poiché il nome building nome è memorizzato solo nella tabella degli edifici e l'anno di restauro è disponibile solo nella tabella degli edifici. building_restorations è necessario unire le due tabelle per visualizzare le informazioni desiderate.

Nella query di esempio, le tabelle sono specificate come segue:

FROM buildings
JOIN building_restorations

Per le JOIN semplici, l'ordine delle tabelle non ha importanza.

Passo 2. Identificare la condizione di JOIN

Il passo successivo consiste nell'indicare al database quali righe devono essere unite ad altre righe. Questa condizione si chiama condizione di JOIN. Di solito, la condizione di JOIN è l'uguaglianza, cioè si specificano le colonne che le tabelle hanno in comune e si mette un segno di uguaglianza tra queste colonne. Questa condizione viene posta dopo la parola chiave ON:

ON buildings.architect_id = architects.id

Si noti che la maggior parte dei database ha una convenzione di denominazione coerente; è necessario conoscere le convenzioni del proprio database per poter lavorare in modo efficace. Di solito, la convenzione prevede di chiamare la prima colonna id o simile e di utilizzarla come identificatore unico per ogni record. Questo identificatore unico viene anche chiamato chiave primaria. Tutte le tabelle del nostro esempio (ad es. buildings, architects, e building_restorations) hanno la colonna id come chiave primaria.

Poi, è normale che una tabella abbia una colonna che fa riferimento a un'altra tabella, come la colonna architect_id nella tabella buildings o le colonne building_id e architect_id della tabella building_restorations tabella. Queste colonne sono chiamate chiavi esterne.

È molto comune unire le tabelle utilizzando la chiave primaria di una tabella, che è la chiave esterna dell'altra tabella. Per elencare gli edifici insieme ai loro architetti, abbiamo unito le rispettive tabelle utilizzando la chiave primaria della tabella architects (cioè id) e la chiave esterna della tabella buildings della tabella (cioè architect_id, che punta alla tabella architect tabella). Se volessimo elencare gli edifici insieme all'anno di restauro, uniremmo le tabelle buildings e la tabella building_restorations utilizzando la chiave primaria della tabella edifici (cioè id) e la relativa chiave esterna della tabella building_restorations (cioè building_id).

In alcuni casi, una chiave primaria può essere a più colonne. Se la tabella di riferimento include anche una chiave esterna a due colonne, è possibile unire le tabelle utilizzando una condizione JOIN con due uguaglianze. Ad esempio, invece di una colonna id nella tabella architects si potrebbe avere una chiave primaria composita composta da due colonne: (1) style_id, che fa riferimento allo stile architettonico (ad esempio moderno, contemporaneo, ecc.) e (2) architect_id, che fa riferimento all'ID di un particolare architetto che lavora in questo stile. Supponendo che la tabella buildings include anche le colonne style_id e architect_id, possiamo unire le colonne buildings e architects utilizzando la seguente condizione JOIN:

ON buildings.style_id = architects.style_id AND 
   buildings.architect_id = architects.architect_id

Si noti inoltre che, sebbene la condizione di uguaglianza sia la più comune per unire le tabelle in SQL, è possibile utilizzare altre condizioni per unire le tabelle. Questa condizione si chiama join non-equi; potete trovare esempi di join non-equi in questa guida pratica.

Passo 3. Fare riferimento alle colonne in modo corretto

Quando si visualizzano i dati di più tabelle, è necessario fare molta attenzione ai riferimenti alle colonne. Potremmo avere colonne con lo stesso nome in tabelle diverse. (Tutte e tre le nostre tabelle hanno una colonna chiamata id.) Pertanto, quando ci si riferisce a una colonna particolare, si specifica prima il nome della tabella, poi si usa un punto e infine si include il nome della colonna (ad esempio buildings.architect_id). Le stesse regole si applicano alla denominazione delle colonne nella condizione ON, nella clausola SELECT o in qualsiasi altra clausola della query.

Tuttavia, se il nome della colonna è univoco (cioè usato solo in una tabella), si può specificare solo il nome della colonna e omettere il nome della tabella. Ad esempio, se si vuole visualizzare l'anno di ogni edificio insieme al nome e all'architetto, si può utilizzare la seguente query:

SELECT buildings.name, architects.name, year
FROM buildings
JOIN architects
ON buildings.architect_id = architects.id;

Poiché la colonna anno è presente solo nella tabella buildings il database sa quale colonna vogliamo visualizzare e non richiede di specificare la tabella.

Passo 4. Utilizzare gli alias delle tabelle (facoltativo)

Anche se alcuni nomi di colonne sono unici e possono essere referenziati senza il nome della tabella, nella maggior parte dei casi è necessario specificare il nome della tabella prima di ogni nome di colonna. Se il nome della tabella è lungo, non è conveniente o leggibile digitarlo più volte. In questi casi, si può usare un alias di tabella, cioè un nome breve alternativo per questa tabella in questa particolare query.

Si dichiarano gli alias nelle clausole FROM e JOIN mettendo l'alias dopo il nome completo della tabella, con uno spazio in mezzo. L'alias viene poi utilizzato ovunque al posto del nome completo della tabella:

SELECT b.name, a.name
FROM buildings b
JOIN architects a
ON b.architect_id = a.id;

Per mantenere le query leggibili e comprensibili agli altri, scegliere nomi significativi per gli alias. Di solito, la prima lettera del nome di una tabella viene usata come alias (ad es. b per buildings). Se il nome di una tabella è composto da più parole, si possono usare le prime lettere di ciascuna parola (ad esempio, per ). br per building_restorations).

Passo 5. Utilizzare gli alias delle colonne (facoltativo)

Quando viene visualizzato il risultato di una query, le colonne originali sono i nomi delle colonne utilizzate nella tabella di output. In alcuni casi, è possibile rinominare queste colonne o, in altre parole, sostituire i nomi delle colonne originali con degli alias di colonna.

Questa opzione viene utilizzata soprattutto quando ci sono due colonne con lo stesso nome provenienti da due tabelle diverse e si vuole vedere chiaramente che tipo di informazioni vengono visualizzate in ciascuna colonna dell'output.

Ad esempio, si può notare che nella tabella di output della nostra prima query entrambe le colonne si chiamano nome; dobbiamo indagare sul contenuto della tabella per capire quale colonna elenca gli edifici e quale gli architetti. Sostituiamo i nomi originali con alias significativi. Per farlo, dichiariamo gli alias delle colonne nell'istruzione SELECT, dopo la parola chiave AS:

SELECT b.name AS building, a.name AS architect
FROM buildings b
JOIN architects a
ON b.architect_id = a.id;

Ora abbiamo il seguente output:

buildingarchitect
Guggenheim MuseumFrank Lloyd Wright
Fallingwater HouseFrank Lloyd Wright
Neue NationalgalerieLudwig Mies Van der Rohe
Barcelona PavilionLudwig Mies Van der Rohe
Villa DirickzMarcel Leborgne

Molto meglio, vero?

Si noti che è possibile rinominare qualsiasi colonna, non necessariamente solo quelle con lo stesso nome. Inoltre, l'alias di colonna influenza solo la visualizzazione del risultato; non può essere usato come nome di colonna in altre parti della query.

Conclusione SQL JOIN!

Negli scenari reali, spesso è necessario combinare e analizzare i dati di due o più tabelle. È qui che entra in gioco SQL JOIN! Per unire due tabelle in SQL, è necessario scrivere una query con i seguenti passaggi:

  1. Identificare le tabelle da unire.
  2. Identificare la condizione di JOIN.
  3. Fare riferimento alle colonne in modo appropriato.
  4. (Facoltativo) Utilizzare gli alias delle tabelle per rendere leggibile la query.
  5. (Facoltativo) Utilizzare gli alias delle colonne per rendere leggibile il risultato.

Dopo aver unito le tabelle necessarie, è possibile utilizzare WHERE, GROUP BY, HAVING, ORDER BY e altre clausole SQL come per una query a tabella singola.

In questo articolo abbiamo illustrato le basi dell'unione di tabelle in SQL. Tuttavia, c'è molto altro da imparare. Abbiamo utilizzato solo esempi di JOIN interni, ma esistono molti altri tipi di JOIN in SQL. Date un'occhiata al nostro corso SQL JOIN : contiene 93 esercizi interattivi che coprono tutti i tipi più comuni di JOIN, tra cui self-join, non-equi JOIN e altro ancora. Per saperne di più sul corso, consultate questo articolo.

Se volete acquisire una maggiore sicurezza con SQL JOIN, provate il nostro corso Pratica su SQL . Contiene corsi che vanno oltre SQL JOIN; in totale, ci sono 341 sfide di codifica da risolvere. È un sacco di pratica!

Grazie per aver letto e buon apprendimento!