varias tablas right outer natural left inner full ejemplo sql database oracle plsql outer-join

sql - tablas - oracle left join vs(+)



Uniones de Oracle(¿antiguo?): ¿Una herramienta/script para la conversión? (6)

El (+) es la sintaxis OUTER JOIN pre-ANSI-92 específica de Oracle, porque la sintaxis ANSI-89 no proporciona sintaxis para el soporte de OUTER JOIN .

Si está RIGHT o LEFT se determina por qué referencia de tabla y columna se adjunta la notación. Si se especifica al lado de una columna asociada con la primera tabla en la cláusula FROM , es una unión RIGHT . De lo contrario, es una combinación LEFT . Esta es una buena referencia para cualquiera que necesite saber la diferencia entre JOINs .

Primera consulta reescrita usando la sintaxis ANSI-92:

SELECT e.lastname, d.department_name FROM EMPLOYEES e RIGHT JOIN DEPARTMENTS d ON d.departmentid = e.departmentid

Segunda consulta reescrita utilizando la sintaxis ANSI-92:

SELECT e.lastname, d.department_name FROM EMPLOYEES e LEFT JOIN DEPARTMENTS d ON d.departmentid = e.departmentid

He estado migrando selecciones de Oracle, y he estado trabajando en muchas consultas como esta:

SELECT e.last_name, d.department_name FROM employees e, departments d WHERE e.department_id(+) = d.department_id;

...y:

SELECT last_name, d.department_id FROM employees e, departments d WHERE e.department_id = d.department_id(+);

¿Hay guías / tutoriales para convertir todas las variantes de la sintaxis (+)? ¿Cómo se llama esa sintaxis (para poder buscar en Google)?

Mejor aún ... ¿Hay alguna herramienta / script que haga esta conversión para mí (Preferred Free)? Un optimizador de algún tipo? Tengo alrededor de 500 de estas consultas al puerto ..

¿Cuándo se eliminó este estándar? Cualquier información es apreciada.


Esto puede ser bastante complicado como la cláusula WHERE incluso en situaciones simples como

WHERE e.id = d.manager_id(+) OR e.id = d.contact_id(+)

se traducirá a UNION o a una consulta de subselección.

Si le gusta Python, puede echarle un vistazo a sqlparse , parece prometedor y puede hacer que haga lo que necesita además de reformatear el código SQL. Funcionaría fácilmente directamente en la fuente. Tendrás que decirle qué hacer, pero eso te aliviará de escribir la parte aburrida de análisis.


Google "Oracle join syntax". el (+) se usa para diferentes sabores de uniones externas. Creo que el primero que mostraste es un Left Outer Join, y el segundo es un Right Outer Join. No he visto esta notación por bastante tiempo, así que podría estar un poco mal, pero con suerte, esto le da suficiente información para llegar a Google y obtener la respuesta correcta.

ACTUALIZAR:

Entonces, ¿quieres una herramienta que lo haga por ti? He oído que SwisSQL puede hacer algo como esto, pero si la mayoría de las consultas son lo suficientemente simples, probablemente puedas escribir un pequeño script que lo haga por ti. La respuesta de OMG Ponies muestra muy bien el patrón para la conversión de la sintaxis antigua a la nueva.


Me parece recordar que esta sintaxis se fue en la transición de Oracle 8i a 9i, creo que teníamos un plugin de sapos que terminó convirtiéndonos todo para que no tuviéramos que perder el tiempo en cada consulta


No conozco una herramienta para hacer la conversión de forma automática, pero incluso si la hubiera, querría revisar sus cambios caso por caso. Por lo tanto, no creo que una herramienta te ahorre mucho tiempo.

http://www.dba-oracle.com/oracle_news/2004_2_19_rittman.htm dice:

No hay beneficio en el rendimiento ni impacto al utilizar uniones ANSI en lugar de uniones tradicionales, pero al usar uniones ANSI, sus consultas son más portátiles entre las plataformas DBMS, y son un poco más fáciles de leer. Al final, sin embargo, depende de las preferencias personales y, aunque existen ventajas en el estándar ANSI, no hay necesidad de cambiar si no lo desea.

Además, no tiene que usar un estilo u otro en todas partes. Puede convertir su código una consulta a la vez, con la seguridad de que seguirán funcionando. Dejaría las consultas tal como están y decidiría utilizar la sintaxis ANSI SQL-92 en el código nuevo.