sql >> Base de Datos >  >> RDS >> Oracle

Unión exterior izquierda con signo + en Oracle 11g

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

En Oracle, (+) denota la tabla "opcional" en JOIN. Entonces, en su primera consulta, es un P LEFT OUTER JOIN S . En su segunda consulta, es S RIGHT OUTER JOIN P . Son funcionalmente equivalentes.

En la terminología, RIGHT o LEFT especifican qué lado de la combinación siempre tiene un registro y el otro lado puede ser nulo. Así que en un P LEFT OUTER JOIN S , P siempre tendrá un registro porque está a la LEFT , pero S podría ser nulo.

Consulte este ejemplo de java2s.com para una explicación adicional.

Para aclarar, supongo que estoy diciendo que la terminología no importa, ya que solo está ahí para ayudar a visualizar. Lo que importa es que entiendas el concepto de cómo funciona.

DERECHA vs IZQUIERDA

He visto cierta confusión acerca de lo que importa al determinar DERECHO frente a IZQUIERDO en la sintaxis de combinación implícita.

UNIÓN EXTERNA IZQUIERDA

SELECT *
FROM A, B
WHERE A.column = B.column(+)

UNIÓN EXTERNA DERECHA

SELECT *
FROM A, B
WHERE B.column(+) = A.column

Todo lo que hice fue cambiar los lados de los términos en la cláusula WHERE, pero siguen siendo funcionalmente equivalentes. (Consulte más arriba en mi respuesta para obtener más información al respecto). La ubicación del (+) determina DERECHA o IZQUIERDA. (Específicamente, si el (+) está a la derecha, es una UNIÓN IZQUIERDA. Si (+) está a la izquierda, es una UNIÓN DERECHA.)

Tipos de ÚNETE

Los dos estilos de JOIN son JOINs implícitos y JOINs explícitos . Son estilos diferentes de escribir JOIN, pero son funcionalmente equivalentes.

Consulte esta pregunta SO .

UNIONES implícitas simplemente enumere todas las tablas juntas. Las condiciones de unión se especifican en una cláusula WHERE.

ÚNETE implícito

SELECT *
FROM A, B
WHERE A.column = B.column(+)

ÚNETE explícito asocie las condiciones de unión con la inclusión de una tabla específica en lugar de en una cláusula WHERE.

ÚNETE explícito

SELECT *
FROM A
LEFT OUTER JOIN B ON A.column = B.column

Estos JOIN implícitos pueden ser más difíciles de leer y comprender, y también tienen algunas limitaciones, ya que las condiciones de unión se mezclan con otras condiciones WHERE. Como tal, generalmente se recomienda no usar JOIN implícitos en favor de la sintaxis explícita.