MySQL OUTER JOIN Palavra-chave
A palavra-chave OUTER JOIN
no MySQL é usada para recuperar registros de duas tabelas, incluindo os registros que não têm valores correspondentes nas tabelas relacionadas. Ele garante que todos os registros de uma tabela sejam incluídos nos resultados e, quando nenhuma correspondência é encontrada, NULLs são preenchidos nas colunas da respectiva tabela.
Uso
OUTER JOIN
é usado quando você precisa incluir todas as linhas de uma ou ambas as tabelas, independentemente de haver uma correspondência na outra tabela. Há dois tipos principais: LEFT OUTER JOIN
(ou simplesmente LEFT JOIN
) e RIGHT OUTER JOIN
(ou simplesmente RIGHT JOIN
).
SELECT columns
FROM table1
LEFT|RIGHT OUTER JOIN table2
ON table1.common_column = table2.common_column;
Nessa sintaxe, a palavra-chave LEFT|RIGHT OUTER JOIN
determina quais linhas da tabela são totalmente preservadas no conjunto de resultados.
Observação sobre FULL OUTER JOIN
O MySQL não oferece suporte direto a FULL OUTER JOIN
. No entanto, você pode obter resultados semelhantes usando uma combinação de LEFT JOIN
e RIGHT JOIN
com um UNION
.
SELECT columns
FROM table1
LEFT JOIN table2 ON table1.common_column = table2.common_column
UNION
SELECT columns
FROM table1
RIGHT JOIN table2 ON table1.common_column = table2.common_column;
Exemplos
1. Básico LEFT OUTER JOIN
SELECT customers.customer_id, orders.order_id
FROM customers
LEFT OUTER JOIN orders ON customers.customer_id = orders.customer_id;
Essa consulta recupera todos os clientes e seus pedidos, se houver. Os clientes sem pedidos ainda aparecerão no resultado com NULL
nas colunas de pedidos.
2. UNIÃO EXTERNA DIREITA
SELECT products.product_id, orders.order_id
FROM products
RIGHT OUTER JOIN orders ON products.product_id = orders.product_id;
Aqui, todos os pedidos são listados, inclusive aqueles para os quais não há entrada de produto correspondente, preenchendo NULL
para obter detalhes do produto.
3. Combinação de LEFT JOIN com a cláusula WHERE
SELECT employees.employee_id, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.department_id
WHERE departments.department_name IS NULL;
Essa consulta encontra funcionários não atribuídos a nenhum departamento, listando todos os funcionários e filtrando aqueles com nomes de departamentos NULL
.
Dicas e práticas recomendadas
- Escolha o tipo de união correto. Use
LEFT JOIN
quando você precisar de todos os registros da primeira tabela eRIGHT JOIN
quando precisar de todos os registros da segunda tabela. - Tenha em mente o desempenho.
OUTER JOIN
operações podem ser dispendiosas em termos de desempenho; certifique-se de que os índices sejam usados nas colunas de união. A análise dos planos de execução de consultas pode ajudar a otimizar o desempenho. - Tenha cuidado com os NULLs. Considere como seu aplicativo ou as consultas subsequentes tratarão os valores NULL no conjunto de resultados. Use funções como
IFNULL()
ouCOALESCE()
para substituirNULL
por valores padrão. - Use WHERE com cautela. Ao filtrar com
WHERE
, certifique-se de que ele não anule inadvertidamente o efeito doOUTER JOIN
.