2009-02-05 35 views
14

He encontrado algunas consultas SQL en Oracle que contienen '(+)' y no tengo idea de lo que eso significa. ¿Puede alguien explicar su propósito o proporcionar algunos ejemplos de su uso? GraciasSignificado de (+) en consultas SQL

+0

dupe: http://stackoverflow.com/questions/430274/oracle-what-does-do-in-a-where-clause – Alkini

+1

Intenté buscar una respuesta antes de publicar la pregunta pero no recibí ninguna resultados al buscar '+' o '(+). Es extraño que el título de la pregunta en la URL parezca omitir la parte (+) también. – Zabbala

+0

Este es un duplicado de [esta publicación] (http://stackoverflow.com/questions/430274/oracle-what-does-do-in-a-where-clause). Puede encontrar más información allí. –

Respuesta

35

Es el sinónimo de Oracle para OUTER JOIN.

SELECT * 
FROM a, b 
WHERE b.id(+) = a.id 

da mismo resultado que

SELECT * 
FROM a 
    LEFT OUTER JOIN b 
    ON b.id = a.id 
+0

Notaré que para la siguiente persona, preste atención a lo que ha sucedido con los 'a's y' b' aquí. En el ejemplo, la cláusula from es '[a, b]', pero la comprobación de equivalencia es '[b.id = a.id]'. Mi hábito es mantener la equivalencia '[a.id = b.id]'; entonces leí mal el ejemplo. Una hora de mi vida no volveré; ^) – BIBD

+0

Para eso, interpretaría '(+)' como la forma de Oracle de decir "este lado obtiene nulos cuando no se puede encontrar una coincidencia". Usando mi norma para las equivalencias de '[a.id = b.id]'; luego está ocurriendo un espejo. Si estoy volviendo a escribir la consulta para seguir el estándar moderno, '[a.id = b.id (+)]' se convierte en un EXTERIOR IZQUIERDO y '[a.id (+) = b.id]' se convierte en un DERECHA EXTERIOR. – BIBD

+0

El hecho es que el operador (+) se coloca directamente en la instrucción condicional y en el lado de la tabla opcional (la que tiene permitido contener valores vacíos o nulos dentro del condicional). – Yergalem

4

El + es un atajo para OUTER JOIN, dependiendo de qué lado te lo pones, indica un LEFT o RIGHT OUTER JOIN

Comprobar la segunda entrada en this forum post para algunos ejemplos

2

IIRC, el + se usa en versiones anteriores de Oracle para indicar una combinación externa en la sintaxis de unión previa al ANSI SQL. En otras palabras:

select foo,bar 
from a, b 
where a.id = b.id+ 

es el equivalente de

select foo,bar 
from a left outer join b 
on a.id = b.id 

NOTA: esto puede ser al revés/ligeramente incorrecto, ya que nunca he utilizado la sintaxis SQL pre-ANSI.

+1

Se usa en las versiones más nuevas de Oracle para aquellos de nosotros que odian ANSI sql. –

+0

@ Mark Brady exactamente. Creo que hace que el propósito de la consulta sea más claro. Y también * odio * ANSI SQL. –

2

Lo utiliza para asegurarse de que la tabla a la que se une no reduce la cantidad de registros devueltos. Por lo tanto, es útil cuando te unes a una tabla que puede no tener un registro por cada tecla con la que te estás uniendo.

Por ejemplo, si se unían a un cliente y compra tabla:

Para lista de todos clientes y todas sus compras, que desea hacer una combinación externa (+) en la mesa de compra para que los clientes que no ha comprado nada que aún aparezca en su informe.