MySQL LEFT JOIN

Resumo : neste tutorial, você aprenderá sobre LEFT JOINa cláusula MySQL e como aplicá-la para consultar dados de duas ou mais tabelas.

Introdução à cláusula MySQL LEFT JOIN

O LEFT JOINpermite consultar dados de duas ou mais tabelas. Semelhante à INNER JOINcláusula, a LEFT JOINé uma cláusula opcional do SELECTenunciado, que aparece imediatamente após a FROMcláusula.

Suponha que você queira unir duas tabelas t1e t2.

A instrução a seguir mostra como usar a LEFT JOINclá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 JOINclá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 JOINclá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 JOINcombine 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 JOINainda 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 NULLvalores de todas as colunas da linha da tabela certa.

Em outras palavras, LEFT JOINretorna 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 JOINcláusula funciona:

MySQL LEFT JOIN - Diagrama de Venn

Exemplos de cláusulas LEFT JOIN do MySQL

Vejamos alguns exemplos de uso da LEFT JOINcláusula.

1) Usando a cláusula MySQL LEFT JOIN para unir duas tabelas

Consulte as tabelas a seguir customerse orderso 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 JOINclá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 )
Exemplo de MySQL LEFT JOIN

Neste exemplo:

  • A customersé a mesa da esquerda e ordersé a mesa da direita.
  • A LEFT JOINcláusula retorna todos os clientes, incluindo os clientes que não têm pedido. Se um cliente não tiver pedido, os valores na coluna orderNumbere statusserão NULL.

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.customerNumberLinguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Se você substituir LEFT JOINcláusula por INNER JOINclá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 JOINclá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 JOINpara 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 )
MySQL LEFT JOIN linhas sem correspondência

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 JOINcláusulas para unir as três tabelas: employees, customerse 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:

Exemplo de três tabelas MySQL LEFT JOIN

Como funciona.

  • A primeira LEFT JOINretorna todos os funcionários e clientes que representaram cada funcionário ou NULLse o funcionário não é responsável por nenhum cliente.
  • A segunda LEFT JOINretorna os pagamentos de cada cliente representado por um funcionário ou NULLcaso o cliente não tenha pagamento.

Condição na WHEREcláusula vs. ONclá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 JOINcláusula para consultar dados das tabelas orderse arquivos   orderDetails. A consulta retorna o pedido e seus itens de linha do número do pedido 10123.

MySQL LEFT JOIN - Condição na cláusula WHERE

No entanto, se você mover a condição de WHEREcláusula para ONclá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 10123terá itens de linha associados a ele, como na imagem a seguir:

MySQL LEFT JOIN - Condição na cláusula ON

Observe que para INNER JOINa cláusula, a condição da ONcláusula é equivalente à condição da WHEREcláusula.

Neste tutorial, você aprendeu como usar a LEFT JOINcláusula MySQL para unir dados de duas ou mais tabelas.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *