English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Neste tutorial, você aprenderá como usar o join esquerdo do SQL para recuperar dados de duas tabelas.
Uma instrução LEFT JOIN retorna todas as linhas da tabela esquerda e as linhas da tabela direita que atendem aos critérios de conexão. O join esquerdo éum tipo de join externo,portanto também conhecido comoleft outer join。Outras variantes de join externo sãoJoin direitoeJoin completo。
A figura de Venn a seguir ilustra como o join esquerdo funciona.
Atenção:Um join externo é um join que inclui linhas na saída, mesmo que as linhas das duas tabelas a serem conectadas possam não coincidir.
Para entender isso claramente, vamos olhar paraemployeesedepartmentsTabela.
+--------+--------------+------------+---------+ | 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 | +---------+------------------+ | |
Tabela: employees | Tabela: departments |
Agora, suponha que você deseje recuperar todos os IDs de funcionários, nomes e datas de contratação, bem como os nomes dos departamentos dos funcionários, independentemente de eles estarem ou não atribuídos a qualquer departamento. Para obter esse tipo de conjunto de resultados, precisamos aplicar um join esquerdo.
A seguinte instrução usa campos comuns parafuncionários(employees) edepartments(department) tabelas conectadas para recuperar o ID do funcionário, nome, data de contratação e nome do departamentodept_id。Ele também inclui funcionários que não foram atribuídos a nenhum departamento.
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;
Dica:No join de consulta, a tabela esquerda é a que aparece mais à esquerda na cláusula JOIN, enquanto a tabela direita é a que aparece mais à direita na cláusula.
Executar o comando acima, você obterá a seguinte saída:
+--------+--------------+------------+-----------------+ | emp_id | emp_name | hire_date | dept_name | +--------+--------------+------------+-----------------+ | 1 | Ethan Hunt | 2001-05-01 | Recursos Humanos | | 2 | Tony Montana | 2002-07-15 | Administração | | 3 | Sarah Connor | 2005-10-18 | Vendas | | 4 | Rick Deckard | 2007-01-03 | Finance | | 5 | Martin Blank | 2008-06-24 | NULL | +--------+--------------+------------+-----------------+
Como você pode claramente ver, o JOIN esquerdo incluiFuncionáriosna tabela (employees) todas as linhas do conjunto de resultados, independentementedepartmentsna tabeladept_idAs colunas estão correspondentes.
Atenção:Se houver uma linha na tabela esquerda e nenhuma correspondência na tabela direita, as linhas de resultado da associação conterão NULL para todas as colunas da tabela direita.