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

5 buone pratiche per la scrittura di JOIN SQL

Queste best practice per SQL JOINs vi aiuteranno a creare query SQL leggibili che forniscano un output accurato, chiaro e comprensibile.

Considerando che i database relazionali sono costruiti attorno a tabelle correlate, non c'è da stupirsi che SQL JOINs - che consente di combinare informazioni provenienti da più tabelle - sia una delle principali competenze acquisite dai neofiti di SQL. SQL JOINs Il corso di LearnSQL.it è il luogo ideale per rinfrescare le vostre conoscenze sulle JOIN. Se volete che le vostre query SQL funzionino e abbiano un aspetto professionale, dovete seguire le migliori pratiche di SQL JOINs. In questo articolo ne ho riassunte alcune.

SQL JOINs Panoramica

Supponiamo di voler visualizzare tutti gli ordini di una serie di clienti con i loro nomi completi. Sembra abbastanza semplice, no? Tuttavia, nella pratica, non è probabile trovare informazioni sui clienti e sugli ordini nella stessa tabella. La tabella degli ordini può includere l'ID del cliente per ogni ordine, ma di solito non contiene altro sui clienti.

Per combinare le informazioni provenienti dagli elementi customers e orders è necessario unire le tabelle in base al valore di una colonna comune (ad esempio, il numero ID del cliente). Ecco come potrebbe apparire la query SQL per visualizzare tutte le colonne di entrambe le tabelle:

SELECT *
FROM customers
JOIN orders
ON customers.id = orders.customer_id;

Nella clausola SELECT si specificano le colonne che si desidera visualizzare nell'output. Quindi, si inserisce il nome di una tabella nella clausola FROM e il nome di un'altra tabella nella clausola JOIN. Infine, nella clausola ON, si specifica quali colonne di ciascuna tabella devono essere utilizzate per l'unione.

È possibile esercitarsi con la sintassi SQL JOIN con il nostro SQL JOINs corso interattivo, che include 93 sfide di codifica. Se siete alle prime armi con SQL JOINs, date un'occhiata alla mia guida passo-passo all'unione di tabelle in SQL.

Prima di passare alle migliori pratiche di JOIN SQL, vorrei ricordare brevemente i diversi tipi di SQL JOINs:

  • INNER JOIN (o semplice JOIN) è il tipo di join di base. Si usa per visualizzare i record corrispondenti di entrambe le tabelle.
  • LEFT JOIN (o LEFT OUTER JOIN) si applica per mantenere tutti i record della tabella di sinistra e solo i record corrispondenti della tabella di destra.
  • RIGHT JOIN (o RIGHT OUTER JOIN) viene utilizzato per mantenere tutti i record della tabella di destra e solo i record corrispondenti della tabella di sinistra.
  • FULL JOIN (o FULL OUTER JOIN) è usato per conservare tutti i record di tutte le tabelle, anche quelli non abbinati.
  • CROSS JOIN restituisce un insieme di risultati con tutte le possibili combinazioni delle righe di due tabelle.

Ecco il mio articolo con esempi di diversi tipi di SQL JOIN.

SQL JOIN è uno strumento potente che va ben oltre la semplice unione di due tabelle utilizzando una colonna comune. È possibile utilizzare diversi tipi di SQL JOINs per unire una tabella con se stessa (self-join); unire tabelle senza una colonna comune; unire tabelle utilizzando operatori condizionali diversi dagli uguali (non-equi join); unire più tabelle (più di due) in una sola query o unire tabelle basate su diverse colonne.

Vediamo ora quali sono le migliori pratiche SQL per unire due o più tabelle.

5 SQL JOINs Migliori pratiche

Se si desidera che le query SQL siano chiare e leggibili e, soprattutto, che restituiscano l'output previsto, è necessario seguire alcune pratiche per la scrittura di SQL JOINs.

1. Utilizzare le parole chiave JOIN e ON

Prima di tutto, si raccomanda di utilizzare join espliciti, cioè di usare le parole chiave JOIN e ON. A volte si possono incontrare query SQL in cui le tabelle vengono unite implicitamente, semplicemente elencando i nomi delle tabelle nella clausola FROM e usando la clausola WHERE per specificare la condizione di unione.

Ad esempio, le due query seguenti daranno lo stesso risultato:

SELECT *
FROM customers
JOIN orders
ON customers.id = orders.customer_id;
SELECT *
FROM customers, orders
WHERE customers.id = orders.customer_id;

Tuttavia, solo la prima di queste query segue le migliori pratiche di JOIN. La seconda query, che ha un join implicito, presenta diversi problemi:

  • È meno leggibile; questo peggiora con le query SQL complesse. È necessario osservare attentamente per stabilire le tabelle che vengono unite. Bisogna anche trovare la condizione di join, che non ha una parola chiave standard ON prima di essa.
  • Non è possibile specificare il tipo di JOIN quando si utilizza una JOIN implicita (ad esempio FROM customers, orders). Questo può essere un problema se si deve usare qualcosa di diverso dallo standard INNER JOIN.
  • Definire una condizione di join nella clausola WHERE può creare molta confusione, poiché questo non è l'uso tipico della clausola. WHERE viene utilizzato per filtrare i dati; una query è difficile da capire quando le condizioni di join sono mescolate con le condizioni di filtraggio in un'unica clausola.

Pertanto, utilizzare JOIN per specificare le tabelle da unire e ON per specificare la condizione di unione.

2. Scegliere il tipo di join SQL appropriato

Prima di scrivere una query SQL, pensate bene a quale tipo di JOIN SQL è più appropriato in questo caso particolare.

Se si stanno unendo i clienti con un elenco di ordini completati, si desidera includere i clienti che non hanno ancora ordini completati? Si vogliono includere gli ordini che per qualche motivo non hanno l'ID cliente corrispondente? A seconda delle risposte, potrebbe essere necessario utilizzare LEFT JOIN, RIGHT JOIN, o anche FULL JOIN.

Assicuratevi di scegliere il tipo di JOIN SQL appropriato e di inserire i nomi delle tabelle nell'ordine corretto quando utilizzate LEFT JOIN o RIGHT JOIN.

3. Progettare con cura la condizione di JOIN

Se si uniscono due tabelle utilizzando le rispettive chiavi primarie e chiavi esterne, la condizione di join è di solito abbastanza semplice. Tuttavia, non è sempre così:

  • Una colonna comune potrebbe non identificare in modo univoco i record, nel qual caso sarà necessario utilizzare due o più condizioni di unione. Ad esempio, se nel database sono presenti più persone con lo stesso cognome, non è possibile utilizzare solo il cognome per unire le tabelle. È necessario cercare un'altra colonna (ad esempio, ID) o una combinazione di colonne. Ecco come unire due tabelle utilizzando una combinazione di due colonne (first_name e last_name) in entrambe le tabelle:

    SELECT 
    s.first_name, 
    s.last_name, 
    u.id
    FROM students s
    JOIN users u
    ON s.first_name = u.first_name 
    AND s.last_name = u.last_name;
    
  • Potrebbe essere necessario applicare join non uguali con operatori condizionali oltre agli uguali. Se state verificando che il prezzo di una casa rientri nelle aspettative degli acquirenti quando unite i potenziali acquirenti con le case in vendita, la vostra query sarà simile a questa:

    SELECT 
    	b.id, 
    	b.name, 
    	h.id, 
    	h.address, 
    	h.price
    FROM buyers b
    JOIN houses h
    	ON h.price BETWEEN b.min_price AND b.max_price;
    
  • Possono esserci più record corrispondenti in un'altra tabella (ad esempio, un cliente può avere molti ordini). Si desidera ottenere tutti gli ordini o solo i più recenti? Se si vuole unire solo l'ordine più recente, la query sarà leggermente più complessa:

    SELECT 
    	customers.id, 
    	customers.first_name, 
    	customers.last_name,
    	orders.order_date, 
    	orders.order_status
    FROM customers
    JOIN orders
        ON orders.id = (
            SELECT TOP 1 id
            FROM orders
            WHERE customer_id = customers.id
            ORDER BY order_date DESC
        )
    ORDER BY customer_id;
    

La definizione di una corretta condizione di unione è fondamentale per ottenere il risultato corretto dopo l'unione di tabelle in SQL.

4. Utilizzare gli alias delle tabelle

È buona norma utilizzare gli alias delle tabelle quando si uniscono più tabelle o quando si uniscono tabelle con nomi lunghi. Di solito, l'alias include semplicemente la prima lettera del nome completo della tabella o due e più lettere se il nome della tabella è composto da più parole (ad esempio c per customers, ds per daily_sales, ecc.)

Tornando al nostro esempio, possiamo usare la seguente query per ottenere informazioni su ID, nome, cognome, ID ordine, data ordine e stato ordine del cliente:

SELECT
	c.id,
	c.first_name,
	c.last_name,
	o.id,
	o.date,
	o.status
FROM customers c
JOIN orders o
	ON c.id = o.customer_id;

Si noti che gli alias della tabella sono definiti nelle clausole FROM e JOIN subito dopo il nome completo della tabella. Poi, si usano questi alias per fare riferimento a colonne specifiche di queste tabelle nelle istruzioni SELECT e ON. In questo modo si risparmia un bel po' di scrittura, soprattutto se i nomi delle tabelle sono lunghi.

5. Utilizzare gli alias di colonna

Gli alias di colonna sono i nomi assegnati alle colonne dell'insieme di risultati. Per impostazione predefinita, le colonne di output avranno gli stessi nomi delle colonne corrispondenti nelle tabelle originali. Tuttavia, questo spesso genera un risultato confuso.

Per esempio, l'output della query dell'esempio precedente includerà due colonne con il nome id che corrispondono alle colonne ID cliente e ID ordine.

idfirst_namelast_nameiddatestatus
11KateWhite1112021-10-05Awaiting shipment
12RoseParker1122021-10-05Awaiting payment
13WilliamSpencer1092021-10-04Completed
14JohnSmith1082021-10-04Completed

È possibile seguire l'ordine delle colonne per capire quale sia, ma l'approccio migliore è quello di utilizzare gli alias di colonna:

SELECT
	c.id AS customer_id, 
	c.first_name, 
	c.last_name, 
	o.id AS order_id, 
	o.date AS order_date, 
	o.status AS order_status.
FROM customers c
JOIN orders o
	ON c.id = o.customer_id;
customer_idfirst_namelast_nameorder_idorder_dateorder_status
11KateWhite1112021-10-05Awaiting shipment
12RoseParker1122021-10-05Awaiting payment
13WilliamSpencer1092021-10-04Completed
14JohnSmith1082021-10-04Completed

Si noti che sto usando gli alias di colonna anche per le colonne con la data dell'ordine e lo stato dell'ordine. Nella tabella risultante, non è chiaro a cosa si riferiscano queste date e questi stati. Per evitare confusione, è meglio specificare esplicitamente i nomi delle colonne utilizzando gli alias di colonna. Consultate questo articolo per ulteriori suggerimenti su SQL JOIN.

È ora di fare pratica con SQL JOINs!

SQL JOIN è una delle competenze principali acquisite da chi inizia a lavorare con i database relazionali. Tuttavia, non si tratta solo di semplici join. Ci sono molti strumenti e concetti avanzati sotto l'ombrello di SQL JOINs , tra cui diversi tipi di join esterni, self-join, join non equi e altro ancora.

È importante conoscere e utilizzare le best practice di SQL JOINs fin dall'inizio:

  • Definire esplicitamente SQL JOINs con le parole chiave JOIN e ON.
  • Assicurarsi di selezionare il tipo di JOIN SQL corretto.
  • Progettare con cura la condizione di join.
  • Usare gli alias delle tabelle, soprattutto con nomi di tabelle lunghi.
  • Utilizzare gli alias delle colonne per rendere più comprensibile l'output della query.

I corsi interattivi sono di solito l'approccio migliore per mettere in pratica le competenze appena acquisite. Se si è alle prime armi con SQL, si consiglia di iniziare con il corso SQL Basics . Vi introdurrà agli argomenti chiave di SQL, tra cui SQL JOINs.

Per una comprensione più approfondita dei diversi tipi di JOIN, consultare il corso SQL JOINs corso. Sono trattati INNER JOIN, LEFT JOIN, RIGHT JOIN e FULL JOIN; filtrare i dati con diversi tipi di JOIN; unire una tabella con se stessa; unire tabelle su colonne non chiave e altro ancora.

Grazie per aver letto e buon apprendimento!