Resumo : neste tutorial, você aprenderá sobre LEFT JOIN
a cláusula MySQL e como aplicá-la para consultar dados de duas ou mais tabelas.
Introdução à cláusula MySQL LEFT JOIN
O LEFT JOIN
permite consultar dados de duas ou mais tabelas. Semelhante à INNER JOIN
cláusula, a LEFT JOIN
é uma cláusula opcional do SELECT
enunciado, que aparece imediatamente após a FROM
cláusula.
Suponha que você queira unir duas tabelas t1
e t2
.
A instrução a seguir mostra como usar a LEFT JOIN
cláusula para unir as duas tabelas:
SELECT
select_list
FROM
t1
LEFT JOIN t2 ON
join_condition;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Quando você usa a LEFT JOIN
cláusula, os conceitos de tabela esquerda e tabela direita são introduzidos.
Na sintaxe acima, t1
é a tabela da esquerda e t2
é a tabela da direita.
A LEFT JOIN
cláusula seleciona dados a partir da tabela esquerda ( t1
). Ele combina cada linha da tabela esquerda ( t1
) com cada linha da tabela direita ( t2
) com base no arquivo join_condition
.
Se as linhas de ambas as tabelas fizerem com que a condição de junção seja avaliada como true
, LEFT JOIN
combine colunas de linhas de ambas as tabelas em uma nova linha e inclua essa nova linha nas linhas de resultados.
Caso a linha da tabela esquerda ( t1
) não corresponda a nenhuma linha da tabela direita ( t2
), o LEFT JOIN
ainda combina colunas de linhas de ambas as tabelas em uma nova linha e inclui a nova linha nas linhas de resultados. No entanto, ele usa os NULL
valores de todas as colunas da linha da tabela certa.
Em outras palavras, LEFT JOIN
retorna todas as linhas da tabela esquerda, independentemente de uma linha da tabela esquerda ter uma linha correspondente da tabela direita ou não.
Se não houver correspondência, as colunas da linha da tabela direita conterão NULL
.
O diagrama de Venn a seguir ajuda a visualizar como a LEFT JOIN
cláusula funciona:
Exemplos de cláusulas LEFT JOIN do MySQL
Vejamos alguns exemplos de uso da LEFT JOIN
cláusula.
1) Usando a cláusula MySQL LEFT JOIN para unir duas tabelas
Consulte as tabelas a seguir customers
e orders
o banco de dados de amostra .
Cada cliente pode ter zero ou mais pedidos, enquanto cada pedido deve pertencer a um cliente.
Esta consulta usa a LEFT JOIN
cláusula para localizar todos os clientes e seus pedidos:
SELECT
customers.customerNumber,
customerName,
orderNumber,
status
FROM
customers
LEFT JOIN orders ON
orders.customerNumber = customers.customerNumber;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Como alternativa, você pode economizar digitação usando aliases de tabela :
SELECT
c.customerNumber,
customerName,
orderNumber,
status
FROM
customers c
LEFT JOIN orders o
ON c.customerNumber = o.customerNumber;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Neste exemplo:
- A
customers
é a mesa da esquerda eorders
é a mesa da direita. - A
LEFT JOIN
cláusula retorna todos os clientes, incluindo os clientes que não têm pedido. Se um cliente não tiver pedido, os valores na colunaorderNumber
estatus
serãoNULL
.
Como as tabelas clientes e pedidos têm o mesmo nome de coluna ( customerNumber
) na condição de junção com o operador igual, você pode usar a sintaxe USING da seguinte forma:
SELECT
customerNumber,
customerName,
orderNumber,
status
FROM
customers
LEFT JOIN orders USING (customerNumber);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
As seguintes cláusulas são equivalentes:
USING (customerNumber)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
E
ON c.customerNumber = o.customerNumber
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Se você substituir LEFT JOIN
cláusula por INNER JOIN
cláusula, obterá os únicos clientes que possuem pelo menos um pedido.
2) Usando a cláusula MySQL LEFT JOIN para encontrar linhas sem correspondência
A LEFT JOIN
cláusula é muito útil quando você deseja encontrar linhas em uma tabela que não possui uma linha correspondente de outra tabela.
O exemplo a seguir usa o LEFT JOIN
para localizar clientes que não têm pedido:
SELECT
c.customerNumber,
c.customerName,
o.orderNumber,
o.status
FROM
customers c
LEFT JOIN orders o
ON c.customerNumber = o.customerNumber
WHERE
orderNumber IS NULL;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
3) Usando MySQL LEFT JOIN para juntar três tabelas
Consulte as três tabelas a seguir employees
, customers
, e payments
:
Este exemplo usa duas LEFT JOIN
cláusulas para unir as três tabelas: employees
, customers
e payments
.
SELECT
lastName,
firstName,
customerName,
checkNumber,
amount
FROM
employees
LEFT JOIN customers ON
employeeNumber = salesRepEmployeeNumber
LEFT JOIN payments ON
payments.customerNumber = customers.customerNumber
ORDER BY
customerName,
checkNumber;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Esta imagem mostra a saída parcial:
Como funciona.
- A primeira
LEFT JOIN
retorna todos os funcionários e clientes que representaram cada funcionário ouNULL
se o funcionário não é responsável por nenhum cliente. - A segunda
LEFT JOIN
retorna os pagamentos de cada cliente representado por um funcionário ouNULL
caso o cliente não tenha pagamento.
Condição na WHERE
cláusula vs. ON
cláusula
Veja o exemplo a seguir.
SELECT
o.orderNumber,
customerNumber,
productCode
FROM
orders o
LEFT JOIN orderDetails
USING (orderNumber)
WHERE
orderNumber = 10123;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Este exemplo usou a LEFT JOIN
cláusula para consultar dados das tabelas orders
e arquivos orderDetails
. A consulta retorna o pedido e seus itens de linha do número do pedido 10123
.
No entanto, se você mover a condição de WHERE
cláusula para ON
cláusula:
SELECT
o.orderNumber,
customerNumber,
productCode
FROM
orders o
LEFT JOIN orderDetails d
ON o.orderNumber = d.orderNumber AND
o.orderNumber = 10123;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Terá um significado diferente.
Neste caso, a consulta retorna todos os pedidos, mas apenas o pedido 10123
terá itens de linha associados a ele, como na imagem a seguir:
Observe que para INNER JOIN
a cláusula, a condição da ON
cláusula é equivalente à condição da WHERE
cláusula.
Neste tutorial, você aprendeu como usar a LEFT JOIN
cláusula MySQL para unir dados de duas ou mais tabelas.