Como Fazer um INNER JOIN, LEFT JOIN e RIGHT JOIN em SQL

Uma cláusula JOIN é usada para combinar linhas de duas ou mais tabelas, com base em uma coluna relacionada entre elas.


Como Fazer um INNER JOIN, LEFT JOIN e RIGHT JOIN em SQL

Quando você tem tabelas que a resposta de uma consulta pode estar relacionada em outra tabela, muitas vezes para exibirmos de maneira simplificada precisamos fazer esses tipos de consultas um pouco mais complexas .

Então vamos ver de forma mais simples para pegar o jeito de uma vez por todas. Lembrando que se você não possuir um banco de dados, nesse caso o MySQL instalado, você pode testar essas consultas online com uma das ferramentas apresentadas nesse artigo: Conheça 7 Serviços OnLine para Executar seus Comandos SQL

Imagens ilustrativas

Introdução

Uma cláusula JOIN é usada para combinar linhas de duas ou mais tabelas, com base em uma coluna relacionada entre elas.

Diferentes tipos de SQL JOINs

Aqui estão os diferentes tipos de JOINs no SQL:

  • INNER JOIN : Retorna registros que possuem valores correspondentes nas duas tabelas;
  • LEFT JOIN: Retorna todos os registros da tabela esquerda e os registros correspondentes da tabela direita;
  • RIGHT JOIN: Retorna todos os registros da tabela da direita e os registros correspondentes da tabela da esquerda.

Conteúdo das Tabelas

Para explicar como funciona essas consultas vamos usar esse banco de dados examples_joins.sql . Se quiser importar a tabela use esse comando:

  1. Logue no MySQL e crie uma [base de dados(https://www.luis.blog.br/banco-de-dados-e-sql-diferenca-entre-base-de-dados-e-banco-de-dados.html);
  • A opção -u informa o usuário;
  • A opção -p informa que precisa inserir senha;
mysql -u NOME_DO_USUÁRIO -p
  1. Crie uma base de dados com o nome examples_joins:
CREATE DATABASE examples_joins;

Criando Database e Mudando

  1. Após sair do MySQL com o comando exit ou quit, rode o comando abaixo para importar a base:

    Lembrando que o arquivo precisa estar no mesmo diretório que você fará a importação.

mysql -u NOME_DO_USUÁRIO -p NOME_DA_BASE < examples_joins.sql
  1. Depois entre no MySQL e verifique se está tudo certo. Após logar rode o comando USE examples_joins; para mudar/definir a base para uso. E rode um SHOW TABLES para verificar as tabelas. Veja as imagens abaixo:
    • A opção -D informa a base de dados;
mysql -u NOME_DO_USUÁRIO -p -D examples_joins 

Logando e Exibindo a base examples_joins

  1. Verificando se realmente está tudo certo com SELECT * FROM NOME_DE_ALGUMA_TABELA:
SELECT * FROM clientes;
SELECT * FROM notebooks;
SELECT * FROM vendas;

SELECT * FROM NOME_DE_ALGUMA_TABELA

Realizando um INNER JOIN

Retorna registros que possuem valores correspondentes nas duas tabelas. INNER JOIN

SELECT * FROM vendas AS v INNER JOIN clientes AS c ON (v.id_cliente = c.id);
  • a opção AS cria uma alias(apelido v) para a tabela vendas e outros para a tabela clientes(apelido c)

Alternativamente você poderia fazer esse INNER JOIN sem usar a cláusula AS para aliases, assim:

SELECT * FROM vendas v INNER JOIN clientes c ON (v.id_cliente = c.id);

Eu prefiro usar o AS pra não acabar me confundindo mais tarde. =) INNER JOIN

Realizando um LEFT JOIN

Retorna todos os registros da tabela esquerda e os registros correspondentes da tabela direita. LEFT JOIN

SELECT * FROM vendas AS v LEFT JOIN clientes AS c ON (v.id_cliente = c.id);

ou

SELECT * FROM vendas v LEFT JOIN clientes c ON (v.id_cliente = c.id);

LEFT JOIN

Realizando um RIGHT JOIN

Retorna todos os registros da tabela da direita e os registros correspondentes da tabela da esquerda. RIGHT JOIN

SELECT * FROM vendas AS v RIGHT JOIN clientes AS c ON (v.id_cliente = c.id);

ou

SELECT * FROM vendas v RIGHT JOIN clientes c ON (v.id_cliente = c.id);

RIGHT JOIN

Conclusão

Podemos tiras nossas conclusões a partir dessa essa imagem abaixo e notar as difereças de cada um dos tipos de consultas. JOINS

DICAS EXTRAS: Se quiser exportar a base de dados, caso você faça alguma alteração, rode o comando:

mysqldump -h HOST -u NOME_DO_USUÁRIO -p NOME_DA_BASE > examples_joins.sql

E na importação, se tiver problemas com codifição(uso de letras com acentos por exemplo), importe assim:

mysql -h HOST -u NOME_DO_USUÁRIO -p --default_character_set utf8 NOME_DA_BASE < examples_joins.sql

Veja também

20 Livros sobre Linguagem SQL que você deveria ler



mysql sql join


Compartilhe


Nosso canal no Youtube

Inscreva-se


Marcos Oliveira

Marcos Oliveira

Desenvolvedor de software
https://github.com/terroo


Crie Aplicativos Gráficos para Linux e Windows com C++

Aprenda C++ Moderno e crie Games, Programas CLI, GUI e TUI de forma fácil.

Saiba Mais

Receba as novidades no seu e-mail!

Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!