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

RIGHT JOIN in SQL: Tutorial per principianti

Imparate il RIGHT JOIN, un comando fondamentale per ogni specialista di SQL. Il nostro articolo analizza questa tecnica essenziale, aiutando i principianti a navigare e ad applicare senza problemi il RIGHT JOIN nelle loro query di database.

In SQL, RIGHT JOIN (noto anche come RIGHT OUTER JOIN) è fondamentale per gestire i dati in modo efficace. Questo articolo è una guida per principianti all'SQL RIGHT JOIN, una tecnica essenziale per unire tabelle di dati diverse. Vi illustreremo le caratteristiche di RIGHT JOIN, spiegandovi come si distingue dagli altri tipi di join per la gestione dei dati. Unitevi a noi per scoprire come il RIGHT JOIN in SQL può migliorare le vostre capacità di gestione dei dati.

Per approfondire la conoscenza delle unioni, compresa la RIGHT JOIN, si consiglia di seguire il corsoSQL JOIN all'indirizzo LearnSQL.it è altamente raccomandato. Questo corso interattivo è stato progettato per fornire ai principianti le competenze essenziali di SQL, assicurando loro la possibilità di gestire efficacemente scenari reali di database.

Capire le JOIN in SQL

In SQL, un join è una funzione fondamentale che combina i dati di due tabelle in base a una colonna corrispondente. È essenziale per le attività in cui le informazioni sono memorizzate in tabelle diverse e devono essere visualizzate insieme. Ad esempio, se si dispone di una tabella con i dati dei dipendenti e di un'altra con i dati dei reparti, un join può aiutare a vedere quale dipendente appartiene a quale reparto.

Tra i vari tipi di join, RIGHT JOIN è una tecnica fondamentale. Forse non è così comunemente usata come INNER JOIN, ma è fondamentale per una comprensione completa di SQL.

Presentazione dei dati di esempio

La tabella Ristoranti

RestaurantIDNameOpeningYear
1Galactic Diner2018
2The Enchanted Fork2020
3Cove Café2019
4The Mystic Pizzeria2024

Questa tabella elenca vari ristoranti con l'anno di apertura. In particolare, "The Mystic Pizzeria" è un ristorante di recente apertura che non ha ancora ricevuto valutazioni.

La tabella Valutazioni

RatingIDRestaurantIDRatingReviewer
114.8Alice
224.3Bob
314.9Charlie
434.0Dana
524.2Erin
615.0Frank
714.7Georgia

Questa tabella mostra le valutazioni date dai clienti. Le valutazioni sono collegate ai ristoranti tramite l'ID del ristorante.

INNER JOIN vs. RIGHT JOIN in SQL

In questa sezione analizzeremo le principali differenze tra RIGHT JOIN e INNER JOIN, due importanti tipi di join in SQL.

INNER JOIN

INNER JOIN è il tipo di join più comune. Si usa per combinare le righe di due tabelle. Restituisce solo le righe in cui c'è un valore corrispondente in entrambe le tabelle. Se una riga di una tabella non ha una corrispondenza nell'altra tabella, non apparirà nell'insieme dei risultati.

Applichiamo INNER JOIN al nostro set di dati di esempio. Vogliamo scoprire le valutazioni ricevute da ciascun ristorante.

SELECT 
  Restaurants.Name, 
  Restaurants.OpeningYear, 
  Ratings.Rating, 
  Ratings.Reviewer
FROM Restaurants
INNER JOIN Ratings 
ON Restaurants.RestaurantID = Ratings.RestaurantID;

Questa query unisce la tabella Restaurants con la tabella Ratings in base alla colonna comune RestaurantID. Nella clausola FROM si elenca la prima tabella. Quindi si utilizza la parola chiave INNER JOIN, seguita dalla clausola ON e dalla condizione di join. La condizione di unione determina il modo in cui combinare le informazioni delle due tabelle: in questo caso, le righe devono avere lo stesso ID ristorante.

Ecco il risultato della query:

RatingIDRestaurantIDRatingReviewer
114.8Alice
224.3Bob
314.9Charlie
434.0Dana
524.2Erin
615.0Frank
714.7Georgia

In questo risultato, ogni voce della tabella Restaurants che ha una valutazione corrispondente nella tabella Ratings viene visualizzata. In particolare, "La pizzeria Mystic" è assente dal risultato. Nonostante sia elencata nella Restaurants non ha voci corrispondenti nella tabella Ratings tabella; è esclusa dai risultati. Questo esemplifica la natura selettiva di INNER JOIN, che si concentra sull'intersezione dei dati tra due tabelle.

RIGHT JOIN (RIGHT OUTER JOIN)

RIGHT JOINnoto anche come RIGHT OUTER JOIN, restituisce tutte le righe della tabella di destra (elencate dopo JOIN), insieme alle righe corrispondenti della tabella di sinistra (elencate dopo FROM). Se non c'è corrispondenza, il set di risultati includerà comunque la riga della tabella di destra. Tuttavia, le informazioni mancanti della tabella di sinistra saranno mostrate come NULL.

Una RIGHT JOIN può restituire più righe di una INNER JOIN se ci sono righe nella tabella di destra che non hanno corrispondenze nella tabella di sinistra.

Sintassi della giunzione destra

La sintassi di base di una RIGHT JOIN in SQL è la seguente:

SELECT columns
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;

Qui, table1 e table2 sono le due tabelle da unire. La clausola ON specifica la condizione in base alla quale le tabelle devono essere unite. Di solito, si tratta di un'uguaglianza tra le due colonne selezionate.

Un esempio di base di RIGHT JOIN

Per illustrare questo esempio, consideriamo uno scenario in cui vogliamo elencare tutti i ristoranti e le loro valutazioni. Vogliamo assicurarci che ogni ristorante sia incluso nei risultati della nostra query, indipendentemente dal fatto che sia stato valutato o meno. Questo è un caso d'uso perfetto per RIGHT JOIN, dato che il nostro obiettivo è conservare tutti i record della tabella Restaurants della tabella.

SELECT 
  Restaurants.Name, 
  Restaurants.OpeningYear, 
  Ratings.Rating, 
  Ratings.Reviewer
FROM Ratings
RIGHT JOIN Restaurants 
ON Ratings.RestaurantID = Restaurants.RestaurantID;

Ecco i risultati:

NameOpeningYearRatingReviewer
Galactic Diner20184.8Alice
The Enchanted Fork20204.3Bob
Galactic Diner20184.9Charlie
Cove Café20194.0Dana
The Enchanted Fork20204.2Erin
Galactic Diner20185.0Frank
Galactic Diner20184.7Georgia
The Mystic Pizzeria2024NULLNULL

Come funziona il RIGHT JOIN

Logicamente, una RIGHT JOIN funziona esaminando prima tutte le righe della tabella giusta, che nel nostro esempio è la tabella Restaurants tabella. Per ogni riga di questa tabella, cerca di trovare una riga corrispondente nella tabella di sinistra (Ratings), in base all'espressione di uguaglianza definita nella clausola ON.

  • Righe corrispondenti: Per ogni ristorante che ha ricevuto almeno una valutazione, la query combina i dettagli del ristorante con quelli della valutazione. Questo include ristoranti come "Galactic Diner" e "Cove Café", che hanno voci corrispondenti nella tabella Ratings
  • Righe non corrispondenti: "The Mystic Pizzeria" non ha ancora ricevuto alcuna valutazione, ma la query lo include comunque nel risultato. Tuttavia, poiché non ci sono valutazioni corrispondenti, le colonne Rating e Reviewer per questo ristorante sono riempite con NULL Questo significa che RIGHT JOIN è particolarmente utile quando l'obiettivo è quello di conservare una visione completa dei record di una tabella, indipendentemente dall'esistenza di record corrispondenti nell'altra tabella.

La differenza fondamentale tra RIGHT JOIN e INNER JOIN

La differenza principale tra questi due tipi di JOIN risiede nel modo in cui vengono gestite le righe non corrispondenti:

  • INNER JOIN esclude le righe che non hanno una corrispondenza in entrambe le tabelle.
  • RIGHT JOIN include tutte le righe della tabella di destra, indipendentemente dalla presenza di una corrispondenza nella tabella di sinistra. Riempie i valori mancanti con NULL.

La comprensione di questa distinzione è fondamentale per decidere quale tipo di join utilizzare in base ai requisiti di recupero dei dati della query.

RIGHT JOIN vs. LEFT JOIN

Il concetto di RIGHT JOIN è più facile da comprendere se si capisce la sua relazione con la LEFT JOIN. In sostanza, RIGHT JOIN e LEFT JOIN sono due facce della stessa medaglia. Mentre LEFT JOIN restituisce tutte le righe della tabella di sinistra e le righe corrispondenti della tabella di destra, RIGHT JOIN fa il contrario. Restituisce tutte le righe della tabella di destra e le righe corrispondenti della tabella di sinistra.

Nella sintassi SQL, per passare da una query RIGHT JOIN a una LEFT JOIN (o viceversa) è sufficiente invertire l'ordine delle tabelle nella join e cambiare il tipo di join. Questa duplice natura le rende funzionalmente simili, ma con un focus su tabelle diverse nell'operazione di join.

La query dell'esempio precedente potrebbe essere scritta anche con LEFT JOIN:

SELECT 
  Restaurants.Name, 
  Restaurants.OpeningYear, 
  Ratings.Rating, 
  Ratings.Reviewer
FROM Restaurants 
LEFT JOIN Ratings
ON Ratings.RestaurantID = Restaurants.RestaurantID;

Abbiamo cambiato RIGHT JOIN in LEFT JOIN. Abbiamo anche cambiato l'ordine delle tabelle. La query restituisce lo stesso risultato dell'esempio RIGHT JOIN.

Perché il LEFT JOIN è più comune

In pratica, LEFT JOIN è usato più frequentemente di RIGHT JOIN. Questa preferenza è in gran parte dovuta al modo in cui le persone pensano e strutturano le loro query SQL. In genere, gli utenti di SQL iniziano con una tabella primaria (la tabella di sinistra in LEFT JOIN) e poi inseriscono altri dati da altre tabelle, se necessario.

Poiché l'ordine di lettura da sinistra a destra corrisponde al modo in cui le query sono spesso concepite e scritte, LEFT JOIN risulta più intuitivo. Questo non rende RIGHT JOIN meno importante, ma è solo meno usato a causa del flusso naturale dello sviluppo delle query SQL.

Quando usare la RIGHT JOIN

Anche se meno comune, RIGHT JOIN ha il suo posto. È particolarmente utile negli scenari in cui il punto di partenza sono i dati secondari (la tabella di destra) e si vuole includere o indagare la loro relazione con i dati primari (la tabella di sinistra). Sottostantitanding both LEFT and RIGHT JOINaggiunge flessibilità alle vostre abilità di interrogazione SQL, consentendovi di affrontare i problemi di dati da diverse angolazioni.

Esempi e spiegazioni di RIGHT JOIN

Utilizzando i simboli Restaurants e Ratings scambiamo le tabelle per fornire esempi che spieghino il risultato della RIGHT JOIN, concentrandoci sull'inclusione di tutti i ristoranti, indipendentemente dal fatto che abbiano o meno una valutazione.

Esempio 1: Ristoranti con una valutazione media superiore a 4,5

Vogliamo elencare tutti i ristoranti con una valutazione media superiore a 4,5. Vogliamo includere le loro valutazioni (se disponibili).

SELECT 
  Restaurants.Name, 
  AVG(Ratings.Rating) AS AverageRating
FROM Restaurants
RIGHT JOIN Ratings 
ON Restaurants.RestaurantID = Ratings.RestaurantID
GROUP BY Restaurants.Name
HAVING AVG(Ratings.Rating) > 4.5;

Come funziona

  • Questa query associa la tabella Ratings con la tabella Restaurants utilizzando un RIGHT JOIN.
  • Calcola la valutazione media di ogni ristorante utilizzando il parametro AVG()
  • Filtra per includere solo i ristoranti con una valutazione media superiore a 4,5. Utilizza la clausola HAVING che viene applicata ai risultati aggregati.

Risultato

NameAverageRating
Galactic Diner4.85

Spiegazione

"Galactic Diner" è l'unico ristorante con una media di valutazioni superiore a 4,5. Il secondo ristorante con la valutazione più alta è "The Enchanted Fork"; poiché la sua valutazione media è di 4,25, non viene mostrato nell'output finale.

Esempio 2: Ristoranti senza valutazioni

Obiettivo: Elencare tutti i ristoranti che non hanno ricevuto alcuna valutazione.

Query SQL

SELECT 
  Restaurants.Name, 
  Restaurants.OpeningYear
FROM Ratings
RIGHT JOIN Restaurants 
ON Ratings.RestaurantID = Restaurants.RestaurantID
WHERE Ratings.Rating IS NULL;

Come funziona

  • Questa query utilizza RIGHT JOIN per garantire l'inclusione di tutti i ristoranti, anche di quelli che non corrispondono alle voci del database. Ratings
  • Filtra i ristoranti che non hanno ricevuto valutazioni controllando la presenza di NULL nel campo Ratings

Risultato

NameOpeningYear
The Mystic Pizzeria2024

Spiegazione

"La pizzeria Mystic" appare da sola, perché è l'unica a non essere stata valutata. Forse si tratta di un nuovo ristorante che non ha ancora recensioni. Questo esempio mostra l'efficacia di RIGHT JOIN nell'includere i ristoranti indipendentemente dalle loro valutazioni.

Esempio 3: Il ristorante con il maggior numero di valutazioni

Obiettivo: Identificare i ristoranti con il maggior numero di valutazioni come indicatore di popolarità.

Query SQL

SELECT 
  Restaurants.Name, 
  COUNT(Ratings.RatingID) AS NumberOfRatings
FROM Ratings
RIGHT JOIN Restaurants 
ON Ratings.RestaurantID = Restaurants.RestaurantID
GROUP BY Restaurants.Name
ORDER BY NumberOfRatings DESC
LIMIT 1;

Come funziona

  • Eseguendo una RIGHT JOIN, la query conta le valutazioni per ogni ristorante, assicurandosi che tutti i ristoranti siano presi in considerazione.
  • Ordina i risultati per evidenziare il ristorante con il maggior numero di valutazioni.

Risultato

NameNumberOfRatings
Galactic Diner5

Spiegazione

"Galactic Diner" emerge come il ristorante più recensito, a indicare la sua popolarità. Questo scenario utilizza RIGHT JOIN per restituire tutti i ristoranti, quindi sfrutta le funzioni aggregate per dedurre il ristorante più recensito.

Suggerimenti pratici per una giunzione destra efficace

Infine, condivideremo alcuni consigli pratici per utilizzare efficacemente RIGHT JOINin SQL.

Capire l'ordine delle tabelle

  • Focus sulla tabella giusta: in RIGHT JOIN, l'attenzione è rivolta alla tabella giusta. La tabella giusta è quella che sarà pienamente rappresentata nei risultati. Assicurarsi che la tabella di cui si vogliono conservare interamente i dati, indipendentemente da qualsiasi corrispondenza nell'altra tabella, sia posizionata sul lato destro della join.
  • Visualizzare i dati: Prima di scrivere la query, visualizzare o disegnare le tabelle e le loro relazioni. Questo può aiutare a identificare chiaramente quale tabella deve essere posizionata a destra.

Gestione dei valori NULL

  • Aspettatevi NULLs: In una RIGHT JOIN, le righe della tabella di destra senza alcuna corrispondenza nella tabella di sinistra daranno luogo a valori NULL nelle colonne della tabella di sinistra. Preparatevi a gestire questi valori NULL nella vostra query, filtrandoli o utilizzandoli nell'analisi.

Combinazione di RIGHT JOIN con altre clausole

  • Utilizzo di aggregati e GROUP BY: Le funzioni di aggregazione e GROUP BY possono essere utilizzate efficacemente con RIGHT JOINper riassumere i dati, ad esempio per trovare i ristoranti con una valutazione media di 4,5 o più, come mostrato nell'Esempio 1.
  • Filtrare con attenzione: Quando si usano le clausole WHERE con RIGHT JOIN, ricordarsi che i filtri sulla tabella di sinistra possono escludere le righe, riducendo l'efficacia di RIGHT JOIN. I filtri sulla tabella di destra escluderanno le righe della tabella di destra e potrebbero anche avere un impatto sulle righe corrispondenti della tabella di sinistra. Questo è stato illustrato nell'Esempio 2, la query che mostra i ristoranti senza valutazioni.

Evitare gli errori più comuni con RIGHT JOIN

  • Non confondetela con LEFT JOIN: Non bisogna confondere la logica di LEFT JOIN con quella di RIGHT JOIN. Sebbene siano simili, la loro applicazione e i risultati possono essere significativamente diversi a causa dell'ordine delle tabelle.
  • Verificare la presenza di prodotti cartesiani involontari: Fate attenzione ai prodotti cartesiani involontari, che portano a un insieme di risultati molto più ampio di quello previsto. Questo può accadere se la condizione di join è specificata in modo errato o omessa.

Approfondimenti sulle RIGHT JOINs

Il modo migliore per prendere confidenza con RIGHT JOIN è la pratica. Iniziate con il nostro corso interattivo SQL JOIN interattivo. Contiene oltre 90 esercizi pratici per esercitarsi su tutti i principali tipi di SQL JOIN ampiamente utilizzati in SQL, compreso RIGHT JOIN.

È inoltre possibile scaricare il nostro cheat sheetSQL JOIN . Si tratta di una pratica guida di riferimento ai comandi SQL più comuni, tra cui RIGHT JOIN. È utile quando si ha bisogno di ricordare rapidamente la sintassi e le migliori pratiche e può aiutare in modo significativo a usare SQL JOIN quando si scrivono le query.

Leggete i nostri articoli su come esercitarsi con SQL JOIN e SQL Joins: 12 domande pratiche con risposte dettagliate.

Se volete davvero sviluppare le vostre competenze SQL, provate il nostro pianoCompleto per sempre . Vi dà accesso a tutti i nostri corsi SQL attuali e futuri. Ogni mese pubblichiamo un nuovo corso pratico di SQL. Abbiamo corsi per tutti i livelli di conoscenza di SQL e nei quattro dialetti SQL più diffusi.

Continuate a imparare ed esplorare per liberare tutto il potenziale di SQL nelle vostre attività di analisi dei dati!