Blog

Postado em em 24 de agosto de 2022

JOIN no SQL: Conceitos e Aplicações (Guia para Iniciantes)

Aprenda sobre o conceito de JOIN no SQL, seus principais tipos e como utilizá-los para relacionar suas tabelas. Um guia completo para iniciantes!

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

JOIN no SQL: Conceitos e Aplicações (Guia para Iniciantes)

Nesta aula, vou te ensinar o conceito de JOIN no SQL, abordando seus principais tipos e ensinando como utilizá-los para criar relacionamentos no SQL!

Também vou explicar conceitos importantes, como chave estrangeira, chave primária, tabela fato e tabela dimensão. E te mostrar a sintaxe do código em SQL para construir relacionamentos entre tabelas.

JOINs são operações no SQL que permitem combinar dados de duas ou mais tabelas com base em uma coluna relacionada entre elas.

Eles são extremamente úteis quando precisamos extrair informações dispersas em diferentes tabelas, facilitando a análise e a integração de dados.

Antes de começarmos de fato com os JOINs, vamos nos familiarizar com alguns termos que serão importantes e úteis para compreender melhor o JOIN no SQL.

Se é iniciante no tema usar um dicionário de SQL poderá ajudar bastante.

Chave Primária e Chave Estrangeira

O primeiro conceito que vamos abordar será compreender o que é uma chave primária e uma chave estrangeira.

A chave primária é a coluna que identifica as informações distintas em uma tabela, geralmente sendo a coluna de ID. Toda tabela possui uma e apenas uma chave primária, que serve como identificador único. Essa coluna não pode conter valores repetidos.

Por outro lado, a chave estrangeira é uma coluna que permite relacionar as linhas de uma segunda tabela com a chave primária da primeira tabela.

Chave Primária e Chave Estrangeira

Na tabela Produto, a coluna id_subcategoria é a chave estrangeira que nos permite relacionar essa tabela com a tabela Categoria, indicando a qual categoria cada produto pertence.

Tabela Fato e Tabela Dimensão

Dentro de um banco de dados, encontraremos várias tabelas e elas poderão ser classificadas em dois tipos: tabela fato e tabela dimensão. Esse é outro conceito importante que vale a pena conhecer.

A tabela dimensão, também conhecida como tabela de características, contém as informações e as características de um determinado elemento. Por exemplo, uma tabela com nome, preço e marca de um produto.

Nessa tabela, nenhum dos elementos principais se repetirá, e é nela que encontraremos as chaves primárias.

Por sua vez, a tabela fato armazena os acontecimentos de uma determinada empresa. Por exemplo, uma tabela de vendas que registrará a data da venda, a loja onde ocorreu, o funcionário responsável, entre outros dados assim.

Geralmente, essa será uma tabela com milhares de informações, principalmente colunas de ID que usamos para relacioná-las com uma tabela dimensão.

Tabela Fato e Tabela Dimensão

Nesse exemplo temos a tabela dimensão (DimChannel) que resume 4 canais de vendas de uma empresa, e a tabela fato (FactSales) que registra as vendas em si. Podemos observar que essas tabelas se relacionam por meio da coluna ChannelKey.

O que é a cláusula JOIN no SQL e para que serve?

A cláusula JOIN no SQL é uma forma de relacionar duas tabelas e gerar uma tabela resultante com as relações explícitas entre elas. Por exemplo, uma das operações pode ser simplesmente buscar o que é comum entre as tabelas e ressaltar isso em um novo conjunto.

Baseia-se fortemente na teoria dos conjuntos. É, aliás, um dos muitos conceitos da computação que praticamente implementam a base da teoria dos conjuntos. 

Suas operações são literalmente as operações de união, subtração e intersecção da teoria de conjuntos em formas de comando no SQL. 

Logo, a partir do estudo das relações entre tabelas e conjuntos, é possível melhorar a compreensão sobre cada tabela em específico. Esses insights ajudam na tomada de decisão e são úteis para empresas em diversos contextos. 

Pode ser interessante para filtrar dados, explicitar relações entre as tabelas, eliminar componentes indesejados, fazer uma análise mais precisa, etc. 

Por exemplo, caso a empresa tenha uma tabela de vendas de uma loja e uma tabela de vendas com outra loja, é possível saber quais produtos foram vendidos em ambas pela intersecção. 

Ou ainda é possível unir completamente as duas tabelas e gerar uma grande relação com todas as vendas efetuadas em um dado período. 

Ou seja, é possível ampliar e diminuir o escopo para uma análise mais geral e mais específica, respectivamente. 

Nesse ponto, vale especificar que não usamos os termos da teoria dos conjuntos, mas adotamos termos únicos para subcomandos da cláusula JOIN no SQL. Vamos entender a seguir quais são esses termos. 

Quais são os tipos de JOINS no SQL?

Tipos Join SQL ilustração com desenhos

INNER JOIN

O INNER JOIN traz uma ideia muito intuitiva: a de buscar a intersecção entre as tabelas (“A ∩ B” da imagem principal acima). Ou seja, resulta em uma tabela que traz os valores que estão em ambas as tabelas iniciais.

Vamos recuperar o exemplo das vendas em diferentes lojas. Ao aplicar o INNER JOIN no SQL, é possível obter como resultado somente os produtos vendidos nas duas lojas.

A sintaxe é desenvolvida assim:

 FROM tabela1 AS t

 INNER JOIN tabela2 AS tp

ON t.produto = tp.produto 

LEFT JOIN

Já o LEFT JOIN é um pouco mais complexo. Resulta em uma tabela que exibe somente os itens da tabela da esquerda, incluindo os itens em interseção com a tabela direita. Contudo, exclui da relação o resto da tabela da direita.

É como a ideia da subtração que também considera a intersecção. É uma forma de recuperar por completo todos os dados da tabela da esquerda sem perder os que também estão relacionados com a direita.

No nosso exemplo, seria como pegar as vendas da loja 1, em uma listagem completa dessas vendas, o que inclui os produtos unicamente vendidos lá e os produtos que possam ter sido vendidos na loja 2.

A sintaxe: 

FROM tabela1 AS t

LEFT JOIN tabela2 AS tp

ON t.produto = tp.produto 

Uma variação desse LEFT JOIN é o LEFT EXCLUDING JOIN, que pega apenas os valores únicos da tabela da esquerda. Está representado pelo “A – B” na imagem acima.

RIGHT JOIN

O RIGHT JOIN segue a mesma lógica do LEFT, só que para a outra tabela. Pega os dados completos da tabela da direita, incluindo os que também estão na tabela da direita.

A sintaxe também é muito similar. 

Da mesma forma, temos a variação do RIGHT EXCLUDING JOIN, que pega apenas os valores únicos da tabela da direita (representado pelo “B-A” da imagem).

FULL JOIN

O FULL JOIN é o comando para pegar todos os valores das duas tabelas e unir em uma única resultante. É representado pelo “A U B” da imagem principal. 

É como pegar todos os produtos vendidos nas duas lojas da empresa e juntar todos esses registros para facilitar o controle ou a manipulação geral, por exemplo.

Esse conceito é similar à operação de união da teoria dos conjuntos. 

A sintaxe fica assim:

FROM tabela1 AS t

FULL OUTER JOIN tabela2 AS tp

ON t.produto = tp.produto

A variação aqui é o FULL EXCLUDING JOIN, que exclui a interseção, ou seja, os valores em comum. Assim, pega os produtos vendidos unicamente nas lojas, sem aqueles que foram vendidos em ambas as lojas. 

CROSS JOIN

O CROSS JOIN executa uma operação mais complexa, em que todos os itens de uma tabela estarão associados a cada item da outra. 

Assim, se a tabela 2 tem 7 itens e a tabela 1 tem apenas 2, cada um dos dois itens da tabela 1 será representado 7 vezes na nova tabela (com relação com todos os itens da tabela 2).

A sintaxe é algo assim:

FROM tabela1 AS t

CROSS JOIN tabela2 AS tp

 WHERE t.id = 1 OR tp.id = 1

Boas Práticas ao Criar JOINs no SQL

É importante se atentar para algumas dicas de como usar o comando JOIN no SQL de uma maneira eficiente.

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

Especificar claramente as colunas, manter a organização, utilizar aliases, fazer a indentação e adicionar comentários são passos essenciais para escrever códigos SQL profissionais e eficientes.

Outra dica essencial é saber exatamente as diferenças entre os comandos do SQL. Assim, você poderá ter uma boa visão de como usá-los e poderá fazer a filtragem do jeito que deseja.

Leia também: Comandos em SQL que você precisa aprender!

Os JOINs são fundamentais no SQL para combinar dados de diferentes tabelas. No entanto, sua implementação pode ser complexa e, se não forem seguidas boas práticas, pode resultar em códigos confusos e ineficientes.

Agora vou te mostrar as 5 melhores práticas ao criar JOINs no SQL para otimizar suas consultas e melhorar a eficiência do seu código SQL.

Especifique Claramente as Colunas Necessárias

Ao realizar um JOIN, é comum selecionar todas as colunas de todas as tabelas envolvidas. No entanto, isso pode gerar um grande volume de dados desnecessários, tornando a consulta menos eficiente e mais difícil de entender.

Especificar apenas as colunas necessárias otimiza a consulta e facilita a análise dos resultados.

SELECT data_venda, qtd_vendida, nome_produto, marca_produto, nome, email FROM vendas
LEFT JOIN produtos ON vendas.id_produto = produtos.id_produto
LEFT JOIN clientes ON vendas.id_cliente = clientes.id_cliente;
resultado consulta sql

Neste exemplo, apenas as colunas necessárias são selecionadas, reduzindo a complexidade do resultado e facilitando a sua análise e compreensão.

Mantenha a Organização na Sequência das Colunas

Organizar as colunas em uma sequência lógica melhora a legibilidade do código. Uma boa prática é listar as colunas na mesma ordem em que as tabelas são mencionadas no JOIN.

Primeiro as colunas da primeira tabela, depois as colunas da segunda tabela e assim por diante. Manter a organização evita confusões e facilita a manutenção do código.

Utilize Aliases para Tabelas e Colunas

Aliases são apelidos dados às tabelas e colunas para simplificar e encurtar o código SQL. Isso é particularmente útil quando os nomes das tabelas ou colunas são longos ou quando há múltiplas tabelas envolvidas na consulta.

Para atribuir um alias a uma tabela, basta, após o nome dela, dar um espaço e declarar o alias desejado. Por exemplo, vamos substituir vendas por v, produtos por p e clientes por c.

SELECT data_venda, qtd_vendida, nome_produto, marca_produto, nome, email FROM vendas v
LEFT JOIN produtos p ON v.id_produto = p.id_produto
LEFT JOIN clientes c ON v.id_cliente = c.id_cliente;

O uso de aliases torna o código mais limpo e fácil de ler.

Indentação do Código

Indentar o código SQL melhora significativamente sua legibilidade. Separar diferentes partes da consulta em linhas distintas ajuda a visualizar a estrutura da consulta e entender rapidamente quais tabelas estão sendo combinadas e como.

A indentação correta torna o código mais organizado e fácil de manter.

SELECT
    data_venda,
    qtd_vendida,
    nome_produto,
    marca_produto,
    nome,
    email
FROM
    vendas v
        LEFT JOIN
    produtos p ON v.id_produto = p.id_produto
        LEFT JOIN
    clientes c ON v.id_cliente = c.id_cliente;

Você pode fazer esse processo de forma manual ou, no MySQL, usar a opção Beautify para formatar automaticamente o seu código.

Beautify

Use Comentários para Explicar JOINs Complexos

Adicionar comentários ao código SQL é uma prática que facilita o entendimento, especialmente quando o código é revisado por outra pessoa. ´

Comentários são úteis para explicar a lógica por trás de JOINs complexos e fornecer contexto adicional sobre a consulta.

SELECT
    v.data_venda,
    v.qtd_vendida,
    p.nome_produto,
    p.marca_produto,
    c.nome,
    c.email
-- esse código relaciona as tabelas de vendas (v), produtos (p) e clientes (c)
-- eu simplifiquei os nomes das tabelas (v, c, p) por conta do alias
FROM
    vendas v
        LEFT JOIN
    produtos p ON v.id_produto = p.id_produto
        LEFT JOIN
    clientes c ON v.id_cliente = c.id_cliente;

Os comentários ajudam a documentar o código, tornando-o mais acessível para outros desenvolvedores.

Conclusão – JOIN no SQL

Nessa aula, aprendemos os conceitos importantes de chave estrangeira, chave primária, tabela fato e tabela dimensão. Em seguida, exploramos o JOIN no SQL, abordando os principais tipos: LEFT JOIN, RIGHT JOIN, INNER JOIN e FULL JOIN.

O JOIN no SQL é uma cláusula importantíssima para manipular dados, fazer a relação entre tabelas e permitir filtragem para entendimento e controle. Assim, é uma forma de gerenciar a complexidade de bancos de dados grandes e gerar insights precisos sobre eles. 

Além disso, seguir as boas práticas ao criar JOINs no SQL abordadas nessa aula, não só melhora a eficiência das consultas, mas também facilita a leitura, manutenção e compreensão do código

Com esse conhecimento, você está preparado para compreender e criar relacionamentos eficientes no SQL.

Leia também: Trigger no SQL – Para que server e como funciona?

Hashtag Treinamentos

Para acessar outras publicações de SQL, clique aqui!


Quer aprender mais sobre SQL com um minicurso básico gratuito?

Posts mais recentes de SQL

Posts mais recentes da Hashtag Treinamentos