English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Instrução LEFT JOIN do SQL

Neste tutorial, você aprenderá como usar o join esquerdo do SQL para recuperar dados de duas tabelas.

Usando join esquerdo

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.