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

Sentença SQL FULL JOIN

Neste tutorial, você aprenderá como usar SQL Full Join para recuperar dados de duas tabelas.

usando JOIN completo

FULL JOIN retorna todas as linhas das tabelas JOINadas, independentemente de elas coincidirem, o que significa que o JOIN completo combina LEFT JOINeRIGHT JOINfunção. O JOIN completo éum tipo de JOIN externoportanto, também conhecido comofull outer join.

O diagrama de Venn a seguir ilustra como o JOIN completo funciona.

Atenção:Um JOIN externo é um JOIN que inclui linhas no resultado, mesmo que as linhas das duas tabelas a serem JOINadas possam não coincidir.

Para entender isso claramente, vamos olhar para a seguinteemployeesedepartmentsTabela.

+--------+--------------+------------+---------+
| 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ê queira recuperar o nome de todos os funcionários e o nome dos departamentos disponíveis, independentemente de haverem linhas correspondentes na outra tabela. Neste caso, você pode usar JOIN completo, conforme mostrado a seguir.

A seguinte consulta conecta as tabelas employee e department usando o campo dept_id genérico para obter detalhes de todos os departamentos e todos os funcionários.

SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name
FROM employees AS t1 FULL JOIN departments AS t2
ON t1.dept_id = t2.dept_id ORDER BY emp_name;

Alguns bancos de dados (por exemplo, Oracle, MySQL) não suportam JOIN completo. Neste caso, você pode usar o operador UNION ALL para combinar LEFT JOIN e RIGHT JOIN, conforme mostrado a seguir:

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
UNION ALL
SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name
FROM employees AS t1 RIGHT JOIN departments AS t2
ON t1.dept_id = t2.dept_id ORDER BY emp_name;

Após executar o comando acima, você obterá a seguinte saída:

+--------+--------------+------------+------------------+
| emp_id | emp_name     | hire_date  | dept_name        |
+--------+--------------+------------+------------------+
|   NULL | NULL         | NULL       | Customer Service |
|      1 | Ethan Hunt   | 2001-05-01 | Human Resources  |
|      1 | Ethan Hunt   | 2001-05-01 | Human Resources  |
|      5 | Martin Blank | 2008-06-24 | NULL             |
|      4 | Rick Deckard | 2007-01-03 | Finance          |
|      4 | Rick Deckard | 2007-01-03 | Finance          |
|      3 | Sarah Connor | 2005-10-18 | Sales            |
|      3 | Sarah Connor | 2005-10-18 | Sales            |
|      2 | Tony Montana | 2002-07-15 | Administration   |
|      2 | Tony Montana | 2002-07-15 | Administration   |
+--------+--------------+------------+------------------+

Como você vê, o resultado incluidepartmentseemployeesTodas as linhas da tabela.

Dica:Em consultas de junção, a tabela esquerda é a que aparece mais à esquerda no sublinhado JOIN, e a tabela direita é a que aparece mais à direita no sublinhado JOIN.

Atenção:Quando executar junções externas, se o DBMS (Sistema de Gestão de Banco de Dados) não puder coincidir com nenhuma linha, ele colocará NULL na coluna para indicar que os dados não existem.