Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Left Outer Join usando + sinal no Oracle 11g


TableA LEFT OUTER JOIN TableB é equivalente a TableB RIGHT OUTER JOIN Table A .

No Oracle, (+) denota a tabela "opcional" no JOIN. Então, na sua primeira consulta, é um P LEFT OUTER JOIN S . Em sua segunda consulta, é S RIGHT OUTER JOIN P . Eles são funcionalmente equivalentes.

Na terminologia, RIGHT ou LEFT especifica qual lado da junção sempre tem um registro e o outro lado pode ser nulo. Então, em um P LEFT OUTER JOIN S , P sempre terá um registro porque está na LEFT , mas S poderia ser nulo.

Veja este exemplo de java2s.com para explicação adicional.

Para esclarecer, acho que estou dizendo que a terminologia não importa, pois está lá apenas para ajudar a visualizar. O que importa é que você entenda o conceito de como funciona.

DIREITA x ESQUERDA


Eu vi alguma confusão sobre o que importa na determinação RIGHT vs LEFT na sintaxe de junção implícita.

JUNÇÃO EXTERNA ESQUERDA
SELECT *
FROM A, B
WHERE A.column = B.column(+)

JUNÇÃO EXTERNA DIREITA
SELECT *
FROM A, B
WHERE B.column(+) = A.column

Tudo o que fiz foi trocar os lados dos termos na cláusula WHERE, mas eles ainda são funcionalmente equivalentes. (Veja mais acima na minha resposta para mais informações sobre isso.) O posicionamento do (+) determina DIREITA ou ESQUERDA. (Especificamente, se o (+) está à direita, é um LEFT JOIN. Se (+) está à esquerda, é um RIGHT JOIN.)

Tipos de JOIN


Os dois estilos de JOIN são JOINs implícitos e JOINs explícitos . Eles são estilos diferentes de escrever JOINs, mas são funcionalmente equivalentes.

Veja esta pergunta SO .

Joins implícitos simplesmente liste todas as tabelas juntas. As condições de junção são especificadas em uma cláusula WHERE.

JOIN Implícito
SELECT *
FROM A, B
WHERE A.column = B.column(+)

Joins explícitos associar condições de junção com a inclusão de uma tabela específica em vez de uma cláusula WHERE.

UNIÇÃO Explícita
SELECT *
FROM A
LEFT OUTER JOIN B ON A.column = B.column

Esses JOINs implícitos podem ser mais difíceis de ler e compreender e também têm algumas limitações, pois as condições de junção são misturadas com outras condições WHERE. Como tal, JOINs implícitos são geralmente recomendados em favor da sintaxe explícita.