SQL - Left Join vs Right Join: Una Guida Completa per i Principianti

Ciao a tutti, appassionati di SQL in erba! Sono entusiasta di essere il vostro guida in questo viaggio emozionante attraverso il mondo dei join in SQL. Come qualcuno che ha insegnato scienze informatiche per anni, posso assicurarvi che padroneggiare i join è come sbloccare un superpotere nel regno dei database. Allora, immergiamoci e sveliamo i misteri di Left Join e Right Join insieme!

SQL - Left Join vs Right Join

Comprensione dei Join: Le Basi

Prima di addentrarci nei dettagli dei Left e Right Join, facciamo un rapido ripasso su cosa sono i join in SQL. Immagina di stanno organizzando una festa e hai due liste: una con i nomi degli ospiti e un'altra con le loro bevande preferite. I join sono come bacchette magiche che ti aiutano a combinare queste liste in vari modi per ottenere le informazioni di cui hai bisogno.

Funzionamento del Left Join

Cos'è un Left Join?

Un Left Join è come invitare tutti gli ospiti della tua lista alla festa, indipendentemente dal fatto che tu sappia la loro bevanda preferita o no. Restituisce tutti i record dalla tabella di sinistra (la prima tabella menzionata nella query) e i record corrispondenti dalla tabella di destra.

Sintassi del Left Join

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;

Esempio di Left Join

Creiamo due tabelle semplici per illustrare questo concetto:

CREATE TABLE Guests (
GuestID INT PRIMARY KEY,
GuestName VARCHAR(50)
);

CREATE TABLE Drinks (
DrinkID INT PRIMARY KEY,
GuestID INT,
FavoriteDrink VARCHAR(50)
);

INSERT INTO Guests (GuestID, GuestName) VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie'),
(4, 'David');

INSERT INTO Drinks (DrinkID, GuestID, FavoriteDrink) VALUES
(1, 1, 'Mojito'),
(2, 2, 'Beer'),
(3, 3, 'Wine');

Ora, utilizziamo un Left Join per ottenere tutti gli ospiti e le loro bevande preferite (se conosciute):

SELECT Guests.GuestName, Drinks.FavoriteDrink
FROM Guests
LEFT JOIN Drinks ON Guests.GuestID = Drinks.GuestID;

Risultato:

GuestName FavoriteDrink
Alice Mojito
Bob Beer
Charlie Wine
David NULL

Come potete vedere, David appare nel risultato anche se non conosciamo la sua bevanda preferita. Questo è il potere del Left Join!

Funzionamento del Right Join

Cos'è un Right Join?

Un Right Join è come concentrarsi sulla lista delle bevande e vedere quali ospiti preferiscono ciascuna bevanda. Restituisce tutti i record dalla tabella di destra e i record corrispondenti dalla tabella di sinistra.

Sintassi del Right Join

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;

Esempio di Right Join

Utilizzando le nostre tabelle precedenti, eseguiamo un Right Join:

SELECT Guests.GuestName, Drinks.FavoriteDrink
FROM Guests
RIGHT JOIN Drinks ON Guests.GuestID = Drinks.GuestID;

Risultato:

GuestName FavoriteDrink
Alice Mojito
Bob Beer
Charlie Wine

Notate come David non appare in questo risultato perché non ha una bevanda preferita elencata.

Left Join Vs Right Join

Ora che abbiamo visto entrambi i join in azione, confrontiamoli fianco a fianco:

Aspetto Left Join Right Join
Focalizzazione Tutti i record dalla tabella di sinistra Tutti i record dalla tabella di destra
Valori NULL Nella colonna della tabella di destra per non corrispondenze Nella colonna della tabella di sinistra per non corrispondenze
Caso d'uso Quando vuoi tutti i record dalla tabella principale Quando vuoi tutti i record dalla tabella unita
Dimensione del set di risultati Include sempre tutti i record della tabella di sinistra Include sempre tutti i record della tabella di destra

Quando usare Left Join vs Right Join

  1. Usa Left Join quando:
  • Vuoi mantenere tutti i record dalla tabella principale.
  • Sei d'accordo con avere valori NULL per i record non corrispondenti dalla tabella di destra.
  1. Usa Right Join quando:
  • Vuoi mantenere tutti i record dalla tabella secondaria.
  • Sei d'accordo con avere valori NULL per i record non corrispondenti dalla tabella di sinistra.

Consiglio Pro

Nel corso degli anni di insegnamento, ho notato che molti sviluppatori preferiscono utilizzare Left Join rispetto a Right Join. Perché? È spesso più intuitivo da leggere e comprendere. Puoi sempre riscrivere un Right Join come un Left Join semplicemente invertendo l'ordine delle tabelle. Quindi, se trovi Right Join confusionario, sentiti libero di atteneroti ai Left Join!

Esercizio Pratico

Affermiamo la nostra comprensione con un esercizio divertente. Immagina di organizzare un club del libro. Hai due tabelle: Members e Books.

CREATE TABLE Members (
MemberID INT PRIMARY KEY,
MemberName VARCHAR(50)
);

CREATE TABLE Books (
BookID INT PRIMARY KEY,
MemberID INT,
BookTitle VARCHAR(100)
);

INSERT INTO Members (MemberID, MemberName) VALUES
(1, 'Emma'),
(2, 'James'),
(3, 'Sophia'),
(4, 'Oliver');

INSERT INTO Books (BookID, MemberID, BookTitle) VALUES
(1, 1, 'Pride and Prejudice'),
(2, 2, '1984'),
(3, 2, 'To Kill a Mockingbird'),
(4, 3, 'The Great Gatsby');

Ora, provate queste query:

  1. Left Join per ottenere tutti i membri e i loro libri (se ci sono):
SELECT Members.MemberName, Books.BookTitle
FROM Members
LEFT JOIN Books ON Members.MemberID = Books.MemberID;
  1. Right Join per ottenere tutti i libri e i loro proprietari (se ci sono):
SELECT Members.MemberName, Books.BookTitle
FROM Members
RIGHT JOIN Books ON Members.MemberID = Books.MemberID;

Confrontate i risultati. Riuscite a notare le differenze?

Conclusione

Complimenti! Hai appena padroneggiato l'arte dei Left e Right Join in SQL. Ricorda, la pratica fa perfezione, quindi non esitare a sperimentare con questi join in diverse situazioni.

Come pensiero finale, dico sempre ai miei studenti: "I join SQL sono come pezzi di puzzle. Più li usi, meglio diventi a comporre il grande quadro dei tuoi dati!"

Buon querying, e che i vostri join siano sempre azzeccati!

Credits: Image by storyset