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

Come usare gli alias con le JOIN in SQL

Gli alias SQL sono nomi personalizzati che si possono assegnare alle colonne e alle tabelle incluse nelle query. Gli alias sono molto utili, in quanto possono migliorare notevolmente la leggibilità e la manutenzione delle query. Vediamo più da vicino come utilizzare gli alias SQL con JOIN e perché è necessario farlo.

Esistono diversi tipi di alias in SQL:

  1. Alias per le tabelle.
  2. Alias per le colonne della tabella.
  3. Alias per le subquery.

Sebbene esistano diversi modi per utilizzare gli alias nelle query, la sintassi è simile per tutti questi metodi. Vediamo la sintassi degli alias.

Sintassi degli alias SQL

La sintassi riportata di seguito riguarda sia gli alias di colonna che quelli di tabella:

SELECT
  t1.column_name (AS) new_column_name,
  t2.column_name (AS) other_new_column_name,
  ...
FROM table1 (AS) t1
JOIN table2 (AS) t2
  ON t1.column_name = t2.column_name
…

Se vi sentite sopraffatti da questa sintassi, prendete in considerazione l'idea di imparare le basi delle query SQL iscrivendovi al corso SQL Basics . Questo corso vi fornirà una solida base e vi permetterà di leggere, scrivere e comprendere le query SQL con facilità.

Alias di colonna SQL

Per prima cosa, esaminiamo gli alias di colonna:

 t1.column_name (AS) new_column_name,
 t2.column_name (AS) other_new_column_name

La parola chiave AS è facoltativa. Potete includerla se volete, ma la query si comporterà esattamente allo stesso modo.

L'alias viene definito direttamente dopo il nome della colonna (o la parola chiave AS ). In questo caso, gli alias sono new_column_name e other_new_column_name.

Se si desidera includere degli spazi nel nome della nuova colonna, occorre racchiuderlo tra virgolette. Si potrebbe aggiornare questo esempio in:

SELECT t1.column_name (AS) 'new column name'

L'esclusione delle virgolette singole causerebbe un errore.

Ok, questo riguarda gli alias SQL per i nomi delle colonne. Vediamo gli alias delle tabelle.

Alias di tabella SQL

Definiamo gli alias di tabella in questo modo:

FROM table1 (AS) t1
JOIN table2 (AS) t2

Come in precedenza, l'inclusione della parola chiave AS è completamente facoltativa. Dichiariamo che l'alias per table1 è t1. Allo stesso modo, l'alias per table2 è t2.

Quando si rinominano le tabelle del database, è necessario utilizzare gli alias delle tabelle nella condizione ON, nella lista SELECT quando si selezionano le colonne (se è necessario specificare la tabella per la colonna) e in altre parti della query.

Si può notare che seguiamo questa regola includendo t1 e t2 nella clausola SELECT:

SELECT
  t1.column_name (AS) new_column_name,
  t2.column_name (AS) other_new_column_name,
  ... 

Alias SQL per le subquery

Una subquery SQL è una query all'interno di un'altra query. Vediamo la sintassi di come usare gli alias in una subquery.

SELECT column_1, 
       column_2 = (SELECT COUNT(t2.id)
                         FROM table_2 t2
                        WHERE t2.id = t1.id)
  FROM table_1 t1

La subquery è la parte della query in grassetto. Si può notare come gli alias ci aiutino ad accedere alla tabella corretta in ogni parte della query.

Questo conclude il nostro approfondimento sulla sintassi degli alias in SQL. Vediamo alcuni esempi pratici di utilizzo degli alias con JOIN!

Esempi di utilizzo di alias SQL con JOIN

In questa sezione esamineremo alcuni casi d'uso comuni degli alias e spiegheremo come implementare ciascuno di essi. SQL JOINs è un argomento spinoso, incluso in questo articolo sugli argomenti SQL che richiedono pratica. Più si è esposti a esempi pratici, meglio è.

Uso di un alias con nomi di colonne non univoci

Quando si ha a che fare con più tabelle, è comune avere lo stesso nome di colonna in entrambe le tabelle. Questo accade spesso con la colonna id. Ecco un esempio che lo dimostra:

SELECT employee.id, customer.id, employee_name, employee_department 
FROM employees 
INNER JOIN customer 
ON employee.id = customer.employee_id 

I dati risultanti sono visualizzati come:

ididemployee_nameemployee_department
1214John JacobsHuman Resources

Questo risultato confonderà le parti interessate, che non avranno modo di sapere quale id appartiene a quale tabella. L'introduzione di un alias di colonna per ogni colonna id può aiutare:

SELECT employee.id employee_id, customer.id customer_id, employee_name, employee_department 
FROM employees 
INNER JOIN customer 
ON employee.id = customer.employee_id 

Ora il risultato è molto più comprensibile:

employee_idcustomer_idemployee_nameemployee_department
1214John JacobsHuman Resources

Migliorare la leggibilità delle query

Un alias può semplificare e migliorare la leggibilità della query. Ad esempio, immaginiamo che ci sia una colonna chiamata cn_index che memorizza i nomi dei clienti. Non è immediatamente evidente cosa rappresenti questa colonna; per decifrarne il significato è necessaria la documentazione del modello di dati o qualcuno che la spieghi. Questo problema può essere ridotto utilizzando un alias in qualsiasi query che includa questa colonna. Potrebbe apparire come segue:

SELECT cn_index AS customer_id 
FROM customers

Lo stesso vale per tutte le tabelle con nomi sbagliati presenti nel database.

Migliora la manutenibilità delle query

Un alias aiuta anche la manutenibilità. Immaginate di avere una query come quella che segue:

SELECT customer.id, customer.name, customer.age, client.id 
FROM customer 
JOIN client 
ON customer.id = client.id

Immaginiamo ora che la nostra tabella customer ad esempio rinominata in customers_europe. Si dovrebbe apportare la modifica ovunque si faccia riferimento a questa tabella:

SELECT customers_europe.id, customers_europe.name, customers_europe.age, client.id
FROM customers_europe
JOIN client 
ON customers_europe.id = client.id

Questo potrebbe non sembrare un grande passo, ma si tratta di una query breve e semplice. Immaginate di dover aggiornare più stored procedure e funzioni a causa di questa modifica.

Vediamo come gli alias aiutano a risolvere questo problema. La nostra prima query, aggiornata con un alias, potrebbe avere questo aspetto:

SELECT c.id, c.name, c.age, client.id
FROM customer c
JOIN client
ON c.id = client.id

Ora, quando andiamo ad aggiornare la nostra tabella, dobbiamo apportare la modifica in un solo punto:

SELECT c.id, c.name, c.age, client.id
FROM customers_europe c
JOIN client
ON c.id = client.id

Questo si traduce in un enorme risparmio di tempo se si deve aggiornare un gran numero di query, funzioni e stored procedure esistenti.

Auto-giunzioni

Un self-join consente di unire una tabella a se stessa. È utile per interrogare dati gerarchici o per confrontare righe all'interno della stessa tabella. Quando si esegue un'autogiunzione di una tabella, si può usare un LEFT JOIN o un INNER JOIN. Quando si esegue un'autogiunzione, è importante usare un alias SQL logico per ogni istanza della tabella.

Vediamo come scrivere una query che unisca una tabella a se stessa. Per il nostro esempio, utilizzeremo la seguente tabella, tbl_employee. Essa mostra tutti i dipendenti dell'azienda, l'ID del loro reparto e l'ID del loro manager:

idemployee_namedepartment_idmanager_id
1Montgomery Burns4NULL
2Waylon Smithers11
3Homer Simpson21
4Carl Carlson51
5Lenny Leonard31
6Frank Grimes23

Supponiamo di voler ottenere un set di risultati che mostri solo un dipendente e il suo manager. Come si può ottenere questo risultato? Utilizzando gli alias in combinazione con un self-join. Guardate il frammento di codice qui sotto:

SELECT e.employee_name AS 'Employee',
m.employee_name AS 'Manager'
FROM tbl_employee e
LEFT JOIN tbl_employee m
ON m.id = e.manager_id

Si noti che abbiamo usato LEFT JOIN come self-join. Quando si uniscono le tabelle, bisogna fare attenzione all'errore di colonna ambigua, che può verificarsi facilmente se non si fa attenzione. Per evitare questo errore, è necessario specificare esplicitamente l'alias della tabella nel nome della colonna (e.employee_name e m.employee_name).

L'esecuzione della query precedente produce il seguente insieme di risultati:

EmployeeManager
Montgomery BurnsNULL
Waylon SmithersMontgomery Burns
Homer SimpsonMontgomery Burns
Carl CarlsonMontgomery Burns
Lenny LeonardMontgomery Burns
Frank GrimesHomer Simpson

Ecco il risultato desiderato! È possibile vedere chiaramente ogni dipendente e il suo manager. La maggior parte dei dipendenti fa capo al signor Burns. Tuttavia, si può notare che il manager di Frank Grimes è Homer Simpson. Si noti il valore NULL nella colonna Manager per Montgomery Burns. Questo perché Montgomery Burns non ha un manager: è il capo.

Modifichiamo leggermente la query e utilizziamo questa volta un INNER JOIN per la nostra self-join:

SELECT e.employee_name AS 'Employee',
m.employee_name AS 'Manager'
FROM tbl_employee e
INNER JOIN tbl_employee m
ON m.id = e.manager_id
EmployeeManager
Waylon SmithersMontgomery Burns
Homer SimpsonMontgomery Burns
Carl CarlsonMontgomery Burns
Lenny LeonardMontgomery Burns
Frank GrimesHomer Simpson

L'unica differenza sostanziale è l'assenza di Montgomery Burns nella colonna Employee. Questo perché il valore manager_id per lui era NULL e INNER JOIN restituisce solo le colonne corrispondenti; i valori NULL non sono inclusi.

Ora è possibile eseguire le auto-giunzioni, che sono applicabili a molti casi d'uso diversi. Se volete vedere altri esempi, date un'occhiata a questa eccellente guida illustrata alle self-join. L'auto-giunzione è anche descritta in questo utile foglio informativo sulle JOIN di SQL. Inserite la pagina tra i preferiti o scaricatela e avrete sempre a disposizione una guida rapida ai diversi tipi di JOIN.

Creare risultati significativi

Quando si utilizzano funzioni aggregate, per impostazione predefinita il risultato viene visualizzato in una colonna senza nome. Un alias è un modo perfetto per aggiungere un significato ai risultati delle funzioni aggregate.

Vediamo un breve esempio per capire come funziona. Immaginiamo di avere una tabella chiamata payments che contiene alcuni dati di pagamento:

payment_amountpayment_date
1200.992021-01-18
189.232021-02-15
3002.432021-02-25
33.432021-03-03

Ecco una query:

SELECT SUM(payment_amount)
FROM payments

L'esecuzione di questa query produce il seguente risultato:

(No column name)
4,426.08

Non abbiamo idea di cosa rappresenti questo risultato perché non ha un nome di colonna. Aggiorniamo la nostra query con un alias per rendere i risultati più significativi.

SELECT SUM(payment_amount) AS 'Sum of payments'
FROM payments

Eseguire la query per vedere i risultati della nuova query migliorata:

Sum of payments
4,426.08

Questi sono solo alcuni utilizzi dell'alias SQL. Per ulteriori esempi, consultate questo post su come utilizzare gli alias in SQL.

Spiegazione dell'alias SQL JOIN

Abbiamo visto come un alias possa contribuire alla leggibilità e alla manutenibilità delle query SQL, per non parlare del ruolo integrale che svolge nelle auto-giunzioni. Abbiamo esaminato molti casi d'uso ed esempi diversi. Per una formazione più completa sull'argomento, consultate il corso LearnSQL.it SQL JOINs .

Se volete imparare qualcosa di più delle sole JOIN, o magari volete una formazione completa su SQL, il percorso di apprendimento SQL from A to Z è l'opzione migliore per voi. Una volta completato il percorso di apprendimento, avrete gli strumenti necessari (comprese le JOIN e gli alias) per lavorare liberamente ed efficacemente con qualsiasi tipo di dati.