English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In questo tutorial, imparerai come utilizzare il left join SQL per recuperare dati da due tabelle.
Una query LEFT JOIN restituisce tutte le righe della tabella sinistra e le righe della tabella destra che soddisfano le condizioni di connessione. Il left join èuna variante dell'unione esternaper cui è anche chiamataleft outer joinUnione destra和Unione completa
La figura a维恩 mostra come funziona il left join.
Attenzione:Un'unione esterna è un tipo di unione che include righe nel risultato, anche se le righe delle due tabelle da unire potrebbero non corrispondere.
Per comprendere chiaramente questo, diamo un'occhiata a quanto segueemployees和departments表。
+--------+--------------+------------+---------+ | emp_id | emp_name | hire_date | dept_id | +--------+--------------+------------+---------+ | 1 | Ethan Hunt | 2001-05-01 | 4 | | 2 | Tony Montana | 2002-07-15 | 1 | | 3 | Sarah Connor | 2005-10-18 | 5 | | 4 | Rick Deckard | 2007-01-03 | 3 | | 5 | Martin Blank | 2008-06-24 | NULL | +--------+--------------+------------+---------+ | +---------+------------------+ | dept_id | dept_name | +---------+------------------+ | 1 | Administration | | 2 | Customer Service | | 3 | Finance | | 4 | Human Resources | | 5 | Sales | +---------+------------------+ | |
Tabella: employees | Tabella: departments |
Ora, supponiamo che tu voglia recuperare l'ID, il nome e la data di assunzione di tutti i dipendenti e il nome del loro dipartimento, indipendentemente dal fatto che siano assegnati a qualsiasi dipartimento. Per ottenere questo tipo di set di risultati, dobbiamo applicare un join a sinistra.
La seguente istruzione utilizza campi comuni perdipendenti(employees) edepartments(tabella dei dipartimenti) connesse insieme per recuperare l'ID del dipendente, il nome, la data di assunzione e il nome del dipartimentodept_id. Include anche i dipendenti non assegnati a nessun dipartimento.
SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name FROM employees AS t1 LEFT JOIN departments AS t2 ON t1.dept_id = t2.dept_id ORDER BY emp_id;
Suggerimento:Nel join, la tabella di sinistra è la tabella più a sinistra nel clause JOIN, mentre la tabella di destra è la tabella più a destra nel clause JOIN.
Eseguito l'ordine sopra, otterrai l'output seguente:
+--------+--------------+------------+-----------------+ | emp_id | emp_name | hire_date | dept_name | +--------+--------------+------------+-----------------+ | 1 | Ethan Hunt | 2001-05-01 | Human Resources | | 2 | Tony Montana | 2002-07-15 | Administration | | 3 | Sarah Connor | 2005-10-18 | Sales | | 4 | Rick Deckard | 2007-01-03 | Finance | | 5 | Martin Blank | 2008-06-24 | NULL | +--------+--------------+------------+-----------------+
Come potete chiaramente vedere, il JOIN a sinistra includeimpiegatotutte le righe del risultato della ricerca nella tabella (employees), indipendentemente dadepartmentsdella tabelladept_idCorrispondenza delle colonne.
Attenzione:Se c'è una riga nella tabella sinistra e nessuna corrispondenza nella tabella destra, le righe del risultato dell'associazione conterranno NULL per tutte le colonne della tabella destra.