Joins em SQL explicados com exemplos ao vivo

Joins em SQL explicados

Joins em SQL explicados: inner, left, right, full, cross, self | We.Inc

Rode cada join SQL em duas pequenas tabelas de exemplo direto no navegador e veja quais linhas sobram, com a sintaxe do PostgreSQL para INNER, LEFT, RIGHT, FULL, CROSS e self joins.

Um join combina linhas de duas tabelas usando uma condição, geralmente chaves correspondentes. INNER JOIN mantém só as linhas que correspondem dos dois lados. LEFT JOIN mantém todas as linhas da tabela da esquerda e preenche com NULL as colunas da direita que faltam, RIGHT JOIN faz o inverso, FULL JOIN mantém as dos dois lados e CROSS JOIN combina cada linha com todas as outras.

Quais linhas cada join mantém

Diagramas de Venn são a forma usual de ensinar joins, mas escondem a parte que realmente pega: linhas duplicadas e NULLs. Abaixo há duas tabelas pequenas, customers e orders, com um cliente que nunca fez pedido e um pedido cujo cliente foi apagado. Escolha um join e o resultado é calculado no seu navegador, para você ver exatamente quais linhas aparecem e por quê.

Perguntas frequentes

Qual é a diferença entre INNER JOIN e LEFT JOIN?

INNER JOIN descarta as linhas que não têm correspondência. LEFT JOIN mantém todas as linhas da primeira tabela e coloca NULL nas colunas da segunda quando nada corresponde. Na demonstração, Cleo aparece no LEFT JOIN com um pedido vazio e não aparece no INNER JOIN.

JOIN é o mesmo que INNER JOIN?

Sim. No PostgreSQL, a palavra INNER é opcional e um JOIN sozinho é um inner join. A palavra OUTER também é opcional, então LEFT JOIN e LEFT OUTER JOIN significam a mesma coisa.

Por que meu join retornou mais linhas do que a tabela tem?

Cada linha da esquerda aparece uma vez para cada linha correspondente da direita. Um cliente com três pedidos aparece três vezes. Esse é o comportamento correto; agregue com GROUP BY ou faça o join com uma subconsulta já agrupada se precisar de uma linha por cliente.

O que é um self join?

Uma tabela unida a ela mesma com dois aliases, usada quando as linhas apontam para outras linhas da mesma tabela, como funcionários e seus gerentes ou clientes e quem os indicou.

O MySQL suporta FULL OUTER JOIN?

O PostgreSQL suporta, e essa é a sintaxe mostrada aqui. O MySQL não tem a palavra-chave FULL JOIN; a alternativa usual é combinar um LEFT JOIN com um RIGHT JOIN usando UNION.

ON, USING e NATURAL

Filtros de outer join rodam em outra ordem

Teste no PostgreSQL

Cole isto no psql ou em qualquer editor SQL do Postgres para recriar as tabelas de exemplo e depois rode as consultas da demonstração.

Tabelas de exemplo

O pedido 104 aponta de propósito para o cliente 9, que não existe, para que os outer joins tenham algo a mostrar.

Clientes que nunca fizeram pedido

O LEFT JOIN mantém Cleo com as colunas de pedido em NULL, e o filtro IS NULL mantém só essas linhas.

Playground de joins

Tabelas de exemplo usadas na demonstração

Tipo de join

Resultado: {n} linhas

As células destacadas foram preenchidas com NULL pelo outer join.

SELF

Comece grátis · Sem cartão de crédito

Relacionados: Guias

Produto

Para quem é

Recursos

Recursos

Empresa

Mapa do site