SQL Left Outer Join

Esempio

Un Join esterno sinistro (noto anche come Join sinistro o Join esterno) è un Join che assicura che tutte le righe della tabella sinistra siano rappresentate; se non esiste una riga corrispondente dalla tabella di destra, i suoi campi corrispondenti sono NULL .

L'esempio seguente selezionerà tutti i reparti e il primo nome dei dipendenti che lavorano in quel dipartimento. I reparti senza dipendenti sono ancora restituiti nei risultati, ma avranno NULL per il nome del dipendente:

SELECT          Departments.Name, Employees.FName
FROM            Departments 
LEFT OUTER JOIN Employees 
ON              Departments.Id = Employees.DepartmentId

Ciò restituirebbe il seguente dal database di esempio :

Departments.Name Employees.FName
HR Giacomo
HR John
HR Johnathon
I saldi Michael
Tech NULLO

Quindi come funziona?

Ci sono due tabelle nella clausola FROM:

Id FName LName Numero di telefono ManagerID DepartmentID Stipendio Data di assunzione
1 Giacomo fabbro 1234567890 NULLO 1 1000 01-01-2002
2 John Johnson 2468101214 1 1 400 23-03-2005
3 Michael Williams 1357911131 1 2 600 12-05-2009
4 Johnathon fabbro 1212121212 2 1 500 24-07-2016

e

Id Nome
1 HR
2 I saldi
3 Tech

Innanzitutto un prodotto cartesiano viene creato dalle due tabelle dando una tabella intermedia.
I record che soddisfano i criteri di join ( Departments.Id = Employees.DepartmentId ) sono evidenziati in grassetto; questi sono passati alla fase successiva della query.

Poiché questo è un GIÙ ESTERNO SINISTRO, tutti i record vengono restituiti dal lato SINISTRA del join (Dipartimenti), mentre a tutti i record sul lato DESTRO viene assegnato un indicatore NULL se non corrispondono ai criteri di join. Nella tabella seguente, questo restituirà Tech con NULL

Id Nome Id FName LName Numero di telefono ManagerID DepartmentID Stipendio Data di assunzione
1 HR 1 Giacomo fabbro 1234567890 NULLO 1 1000 01-01-2002
1 HR 2 John Johnson 2468101214 1 1 400 23-03-2005
1 HR 3 Michael Williams 1357911131 1 2 600 12-05-2009
1 HR 4 Johnathon fabbro 1212121212 2 1 500 24-07-2016
2 I saldi 1 Giacomo fabbro 1234567890 NULLO 1 1000 01-01-2002
2 I saldi 2 John Johnson 2468101214 1 1 400 23-03-2005
2 I saldi 3 Michael Williams 1357911131 1 2 600 12-05-2009
2 I saldi 4 Johnathon fabbro 1212121212 2 1 500 24-07-2016
3 Tech 1 Giacomo fabbro 1234567890 NULLO 1 1000 01-01-2002
3 Tech 2 John Johnson 2468101214 1 1 400 23-03-2005
3 Tech 3 Michael Williams 1357911131 1 2 600 12-05-2009
3 Tech 4 Johnathon fabbro 1212121212 2 1 500 24-07-2016

Infine, ogni espressione utilizzata all'interno della clausola SELECT viene valutata per restituire il nostro tavolo finale:

Departments.Name Employees.FName
HR Giacomo
HR John
I saldi Richard
Tech NULLO