Mostrando postagens com marcador aqui. Mostrar todas as postagens
Mostrando postagens com marcador aqui. Mostrar todas as postagens

sexta-feira, 26 de novembro de 2010

Oracle: Diferença entre Join interno e join externo



Uma dúvida que surge quando começamos a fazer o join (junção de duas tabelas) é diferenciar de primeiro caso a diferença entre join interno (inner join) e join externo(outer join).
Hoje vamos ver de maneira simples como pode ser explicado tal confusão:


JOIN EXTERNO (OUTER JOIN)

O Join externo acontece quando desejamos pegar todas informações de duas tabelas destintas. Caso durante a junção da tabelas haja campos que não tenham valores (null) esses campos serão preenchidos com null. Cabe salientar que é possível escolher qual tabela favorecer neste tipo de join, pode ser a tabela da direita ou da esquerda. Como pode ser visto abaixo:

Sintaxe: 

SELECT COLUNAS 
FROM TABELA1 
RIGHT/LEFT OUTER JOIN  TABELA2 ON TABELA1.ID=TABELA2.ID_TAB1

Cabe salientar que no RIGHT/LEFT é utilizado só uma das opções ou RIGHT ou LEFT

Exemplo:

Neste exemplo existe duas tabelas distintas CIDADE e FABRICANTE, irei fazer um join externo para direita(right) das mesmas:

SELECT * FROM fabricante RIGHT OUTER JOIN cidade ON fabricante.cidade_id = cidade.id

Caso você esteja utilizando o Oracle o outer join pode ser feito utilizando a notação (+) ao lado tabela que você deseja que seja favorecida:

Sintaxe:

SELECT CAMPOS 
FROM TABELA1,TABELA2 
WHERE TABELA1.ID(+)=TABELA2.ID_TAB2

Exemplo:

SELECT
FROM CIDADE,FABRICANTE
WHERE
CIDADE.ID(+)=FABRICANTE.CIDADE_ID

Click na imagem para aumenta-la


JOIN INTERNO (INNER JOIN)

O Join interno acontece quando desejamos pegar todas informações de duas tabelas distintas, ao contrario do join interno este tipo de join pega somente as combinações validas onde não existe valores nulos.

Sintaxe: 

SELECT COLUNAS 
FROM TABELA1 
INNER JOIN  TABELA2 ON TABELA1.ID=TABELA2.ID_TAB1

Exemplo:

Neste exemplo existe duas tabelas destintas CIDADE e FABRICANTE, irei fazer um join interno.

SELECT * FROM fabricante  INNER JOIN cidade ON fabricante.cidade_id = cidade.id

Existe uma maneira mais fácil  e menor de fazer este tipo de join como é exposto abaixo:

Sintaxe:

SELECT CAMPOS 
FROM TABELA1,TABELA2 
WHERE TABELA1.ID=TABELA2.ID_TAB2

Exemplo:

SELECT * 
FROM CIDADE,FABRICANTE
WHERE
CIDADE.ID=FABRICANTE.CIDADE_ID


Click na imagem para aumenta-la