Pular para o conteúdo

Entendendo os Tipos de JOIN no Oracle SQL

Entendendo os Tipos de JOIN no Oracle SQL

Neste artigo, falaremos sobre os joins, que são utilizados no SQL para combinar registros de duas ou mais tabelas em um banco de dados com base em campos relacionados entre elas. Discutiremos os tipos de joins disponíveis no Oracle SQL e forneceremos exemplos práticos para facilitar o entendimento.

INNER JOIN (ou simplesmente JOIN)

O INNER JOIN retorna registros quando há pelo menos uma correspondência em ambas as tabelas.

Exemplo:

Considere as tabelas ALUNOS e NOTAS:

CREATE TABLE ALUNOS
(
   ID NUMBER PRIMARY KEY,
   NOME VARCHAR2(50)
);

CREATE TABLE NOTAS
(
   ID_ALUNO NUMBER REFERENCES ALUNOS(ID),
   NOTA NUMBER
);

INSERT INTO ALUNOS VALUES (1, 'Ana');
INSERT INTO ALUNOS VALUES (2, 'Pedro');
INSERT INTO NOTAS VALUES (1, 8);
INSERT INTO NOTAS VALUES (2, 10);

Agora, queremos combinar essas tabelas para obter o nome do aluno e sua nota:

SELECT A.NOME, N.NOTA
FROM ALUNOS A
INNER JOIN NOTAS N ON A.ID = N.ID_ALUNO;

LEFT (OUTER) JOIN

O LEFT JOIN retorna todos os registros da tabela à esquerda (tabela A), e os registros correspondentes da tabela à direita (tabela B). Se não houver correspondência, o resultado é NULL para a tabela à direita.

Exemplo:

Supondo que apenas o aluno ‘Ana’ tenha uma nota:

DELETE FROM NOTAS WHERE ID_ALUNO = 2;

Se usarmos um LEFT JOIN:

SELECT A.NOME, N.NOTA
FROM ALUNOS A
LEFT JOIN NOTAS N ON A.ID = N.ID_ALUNO;

O resultado incluirá todos os alunos, mas a nota de ‘Pedro’ será NULL.

RIGHT (OUTER) JOIN

O RIGHT JOIN retorna todos os registros da tabela à direita (tabela B), e os registros correspondentes da tabela à esquerda (tabela A). Se não houver correspondência, o resultado é NULL para a tabela à esquerda.

Usando os dados anteriores, se executarmos:

SELECT A.NOME, N.NOTA
FROM ALUNOS A
RIGHT JOIN NOTAS N ON A.ID = N.ID_ALUNO;

Obteremos apenas a entrada para ‘Ana’ porque ‘Pedro’ não tem uma nota correspondente.

FULL (OUTER) JOIN

O FULL JOIN retorna registros quando há uma correspondência em uma das tabelas. Portanto, ele retornará todos os registros da tabela A e da tabela B, com NULL em ambos os lados se não houver correspondência.

Exemplo:

Se quisermos todos os registros de ambas as tabelas, independentemente de terem uma correspondência:

SELECT A.NOME, N.NOTA
FROM ALUNOS A
FULL JOIN NOTAS N ON A.ID = N.ID_ALUNO;

CROSS JOIN

O CROSS JOIN combina cada linha da primeira tabela com cada linha da segunda tabela.

Exemplo:

SELECT A.NOME, N.NOTA
FROM ALUNOS A
CROSS JOIN NOTAS N;

Se tivermos 2 alunos e 2 notas, teremos 4 combinações.

SELF JOIN

Um SELF JOIN é um join em que uma tabela é unida a si mesma.

Exemplo:

Se tivermos uma tabela de EMPREGADOS com uma coluna “SUPERVISOR_ID” que referencia o próprio ID da tabela EMPREGADOS, poderíamos usar um SELF JOIN para encontrar a relação entre empregado e supervisor.

SELECT E1.NOME AS EMPREGADO, E2.NOME AS SUPERVISOR
FROM EMPREGADOS E1, EMPREGADOS E2
WHERE E1.SUPERVISOR_ID = E2.ID;

Então é isso !

Abs

Referências

  • Oracle® Database SQL Language Reference. Available at: Oracle’s Official Documentation
  • Feuerstein, S., & Pribyl, B. (2014). Oracle PL/SQL Programming. O’Reilly Media, Inc.
Giovano Silva

Giovano Silva

Giovano Silva é um profissional com mais de 10 anos de experiência em tecnologias Oracle, com ênfase em PL/SQL. Ele adora escrever sobre soluções para problemas comuns enfrentados por profissionais Oracle em seu dia a dia. Seu objetivo é compartilhar conhecimento, simplificar conceitos complexos e ajudar a comunidade Oracle a crescer coletivamente.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress