Come ordinare i risultati con ORDER BY durante la JOIN di tabelle SQL utilizzando colonne da ciascuna tabella

Quando si uniscono più tabelle in SQL, ordinare i dati in base a colonne specifiche è importante per migliorare la leggibilità e l’efficienza dell’analisi. In questo articolo, spiegheremo dettagliatamente come unire più tabelle e ordinare i dati utilizzando ORDER BY in base a colonne di ciascuna tabella.

Indice

Descrizione di base dell’unione delle tabelle

L’unione di tabelle è una tecnica in SQL per combinare più tabelle in un unico risultato. Principalmente, esistono vari tipi di join come INNER JOIN, LEFT JOIN, RIGHT JOIN e FULL JOIN. Questo permette di integrare dati correlati e ottenerli in una sola volta.

INNER JOIN

INNER JOIN restituisce solo le righe corrispondenti presenti in entrambe le tabelle.

LEFT JOIN

LEFT JOIN restituisce tutte le righe della tabella a sinistra e le righe corrispondenti della tabella a destra. Se non c’è corrispondenza, viene restituito NULL.

RIGHT JOIN

RIGHT JOIN restituisce tutte le righe della tabella a destra e le righe corrispondenti della tabella a sinistra. Se non c’è corrispondenza, viene restituito NULL.

FULL JOIN

FULL JOIN restituisce tutte le righe di entrambe le tabelle e riempie con NULL le righe non corrispondenti.

Sintassi di base di ORDER BY

La clausola ORDER BY viene utilizzata per ordinare i risultati di una query SQL in base a colonne specifiche. L’ordine può essere controllato specificando ascendente (ASC) o discendente (DESC). La sintassi di base è la seguente.

Sintassi di base

SELECT column_name1, column_name2, ...
FROM table_name
ORDER BY column_name1 [ASC|DESC], column_name2 [ASC|DESC], ...;

Esempio: Ordinamento su una singola colonna

SELECT first_name, last_name
FROM employees
ORDER BY last_name ASC;

In questo esempio, i risultati della colonna last_name della tabella employees vengono ordinati in ordine crescente.

Esempio: Ordinamento su più colonne

SELECT first_name, last_name, hire_date
FROM employees
ORDER BY last_name ASC, hire_date DESC;

In questo esempio, i risultati vengono prima ordinati per la colonna last_name in ordine crescente e poi per la colonna hire_date in ordine decrescente.

Come utilizzare ORDER BY durante la JOIN di più tabelle

Quando si uniscono più tabelle, è possibile utilizzare la clausola ORDER BY per ordinare il set di risultati. È possibile ordinare in base a una colonna di una delle tabelle unite. Nelle query con join, la clausola ORDER BY viene applicata all’intero set di risultati.

Sintassi di base

SELECT table1.column_name1, table2.column_name2, ...
FROM table1
JOIN table2 ON table1.common_column = table2.common_column
ORDER BY table1.column_name1 [ASC|DESC], table2.column_name2 [ASC|DESC], ...;

Esempio: INNER JOIN e ORDER BY

Nell’esempio seguente, le tabelle employees e departments vengono unite e il set di risultati viene ordinato in base alla colonna department_name della tabella departments e alla colonna last_name della tabella employees.

SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.department_id
ORDER BY departments.department_name ASC, employees.last_name DESC;

In questa query, i risultati vengono ordinati prima per la colonna department_name in ordine crescente e i dipendenti all’interno dello stesso dipartimento vengono ordinati per la colonna last_name in ordine decrescente.

Come ordinare utilizzando colonne di tabelle diverse

Quando si uniscono più tabelle, è possibile ordinare i risultati in base a colonne di tabelle diverse. In tal caso, è necessario specificare chiaramente il nome della tabella insieme alla colonna nella clausola ORDER BY.

Esempio: LEFT JOIN e ordinamento su più colonne

Nell’esempio seguente, le tabelle customers e orders vengono unite e il set di risultati viene ordinato in base alla colonna customer_name della tabella customers e alla colonna order_date della tabella orders.

SELECT customers.customer_name, orders.order_id, orders.order_date
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id
ORDER BY customers.customer_name ASC, orders.order_date DESC;

In questa query, i risultati vengono ordinati prima per la colonna customer_name in ordine crescente e gli ordini dello stesso cliente vengono ordinati per la colonna order_date in ordine decrescente.

Esempio: RIGHT JOIN e ordinamento su più colonne

Successivamente, verrà mostrato un esempio in cui le tabelle employees e projects vengono unite e i risultati vengono ordinati in base alla colonna project_name della tabella projects e alla colonna last_name della tabella employees.

SELECT employees.first_name, employees.last_name, projects.project_name
FROM projects
RIGHT JOIN employees ON projects.project_lead_id = employees.employee_id
ORDER BY projects.project_name ASC, employees.last_name ASC;

In questa query, i risultati vengono ordinati prima per la colonna project_name in ordine crescente e i dipendenti appartenenti allo stesso progetto vengono ordinati per la colonna last_name in ordine crescente.

Esempi di query SQL reali

Qui vengono presentati alcuni esempi di query SQL che uniscono più tabelle e ordinano i risultati utilizzando ORDER BY in base a colonne di ciascuna tabella.

Esempio 1: Ordinamento con INNER JOIN

La query seguente unisce le tabelle students e grades e ordina i risultati in base al nome dello studente (colonna student_name della tabella students) e alla data del voto (colonna grade_date della tabella grades).

SELECT students.student_name, grades.grade, grades.grade_date
FROM students
INNER JOIN grades ON students.student_id = grades.student_id
ORDER BY students.student_name ASC, grades.grade_date DESC;

In questa query, i risultati vengono ordinati prima per la colonna student_name in ordine crescente e i voti dello stesso studente vengono ordinati per la colonna grade_date in ordine decrescente.

Esempio 2: Ordinamento con LEFT JOIN

La query successiva unisce le tabelle authors e books e ordina i risultati in base al nome dell’autore (colonna author_name della tabella authors) e alla data di pubblicazione del libro (colonna publication_date della tabella books).

SELECT authors.author_name, books.book_title, books.publication_date
FROM authors
LEFT JOIN books ON authors.author_id = books.author_id
ORDER BY authors.author_name ASC, books.publication_date ASC;

In questa query, i risultati vengono ordinati prima per la colonna author_name in ordine crescente e i libri dello stesso autore vengono ordinati per la colonna publication_date in ordine crescente.

Esempio 3: Ordinamento con RIGHT JOIN

Infine, viene mostrato un esempio in cui le tabelle employees e departments vengono unite e i risultati vengono ordinati in base al nome del dipartimento (colonna department_name della tabella departments) e al cognome del dipendente (colonna last_name della tabella employees).

SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.department_id
ORDER BY departments.department_name ASC, employees.last_name ASC;

In questa query, i risultati vengono ordinati prima per la colonna department_name in ordine crescente e i dipendenti all’interno dello stesso dipartimento vengono ordinati per la colonna last_name in ordine crescente.

Considerazioni sull’uso di ORDER BY

Ci sono alcune considerazioni da tenere a mente quando si utilizza la clausola ORDER BY, al fine di migliorare le prestazioni ed evitare risultati inaspettati.

Ottimizzazione delle prestazioni

L’ordinamento consuma risorse di calcolo, quindi può avere un impatto sulle prestazioni quando si lavora con set di dati di grandi dimensioni. Impostare indici appropriati può migliorare le prestazioni dell’ordinamento. In particolare, è utile impostare indici sulle colonne utilizzate nella clausola ORDER BY.

Gestione dei valori NULL

Quando si ordinano colonne che contengono valori NULL, per impostazione predefinita, questi valori vengono posizionati in cima o in fondo all’elenco. Per specificare la gestione dei valori NULL, è possibile utilizzare NULLS FIRST o NULLS LAST come segue.

ORDER BY column_name ASC NULLS FIRST;
ORDER BY column_name DESC NULLS LAST;

Ordine di ordinamento su più colonne

Quando si ordinano più colonne, l’ordinamento viene eseguito nell’ordine specificato. Le righe con lo stesso valore nella prima colonna vengono ordinate in base alla seconda colonna, quindi è importante scegliere le colonne in modo appropriato per ottenere l’ordine desiderato.

Uso degli alias

Se in una query vengono utilizzati alias per le colonne, è possibile utilizzare tali alias nella clausola ORDER BY. Questo migliora la leggibilità della query.

SELECT first_name AS fname, last_name AS lname
FROM employees
ORDER BY lname ASC, fname ASC;

Impatto della JOIN

A causa della filtrazione dei dati in base alla condizione di JOIN, l’output della clausola ORDER BY potrebbe essere influenzato dal metodo di JOIN utilizzato. È importante impostare con attenzione le condizioni di JOIN per ottenere il risultato desiderato.

Tenendo conto di questi aspetti, è possibile utilizzare efficacemente la clausola ORDER BY per ordinare i dati in modo efficiente e accurato.

Conclusione

Abbiamo spiegato come unire più tabelle in SQL e ordinare i risultati utilizzando ORDER BY in base a colonne di ciascuna tabella. L’uso appropriato di JOIN e ORDER BY può migliorare la leggibilità dei dati e l’efficienza dell’analisi. Considerare l’ordinamento su più colonne, la gestione dei valori NULL e l’ottimizzazione delle prestazioni permette di eseguire operazioni sui dati in modo più efficace. Utilizzando queste tecniche, è possibile creare query SQL più avanzate e migliorare la gestione del database.

Indice