martes, 15 de septiembre de 2015

JOINS - Consultas combinadas


Las consultas  combinadas o JOINS son el resultado de una operación de combinación realizada sobre dos o más tablas. Se pueden realizar las siguientes combinaciones:

Combinación interna (Inner Join)
La combinación interna nos permite mostrar los datos de dos o más tablas a través de una condición WHERE. Para realizar la consulta combinada entre dos tablas debemos escribir una consulta SELECT  en cuya clausula FROM escribiremos el nombre de las dos tablas, separados por comas, y una condición WHERE que obligue mediante un código clave la unión de datos en dos o mas tablas de la siguiente manera:

SELECT RCTA.TRX_NUMBER,
       RCTA.COMMENTS,
       RCTA.INVOICE_CURRENCY_CODE,,
       XDT.CODE,
       XDT.DETAIL_NAME
  FROM APPS.RA_CUSTOMER_TRX_ALL RCTA
 WHERE APPS.XX_DETAIL_TRX_ALL XDT
   AND RCTA.CUSTOMER_TRX_ID = XDT.CUSTOMER_TRX_ID 

Otra opción es utilizar la cláusula INNER JOIN. Su sintaxis es idéntica a la de una consulta SELECT, con la particularidad de que en la clausula FROM sólo aparece con una tabla o vista, añadiéndose el resto de tablas a través de cláusulas INNER JOIN de la siguiente manera:

SELECT RCTA.TRX_NUMBER,
       RCTA.COMMENTS,
       RCTA.INVOICE_CURRENCY_CODE,,
       XDT.CODE,
       XDT.DETAIL_NAME
  FROM APPS.RA_CUSTOMER_TRX_ALL RCTA
 INNER JOIN APPS.XX_DETAIL_TRX_ALL XDT

    ON RCTA.CUSTOMER_TRX_ID = XDT.CUSTOMER_TRX_ID

La cláusula INNER JOIN permite separar completamente las condiciones de combinación con otros criterios, cuando tenemos consultas que combinan nueve o diez tablas esto realmente se agradece. Sin embargo muchos programadores no son amigos de la cláusula INNER JOIN, la razón es que uno de los principales gestores de bases de datos, ORACLE, no la soportaba. Si nuestro programa debía trabajar sobre bases de datos ORACLE no podíamos utilizar INNER JOIN. A partir de la version ORACLE 9i oracle soporta la cláusula INNER JOIN.

Combinación externa Completa (Full Outer Join)
La cláusula FULL OUTER JOIN específica que se debería incluir en el resultado las filas que no cumplen con la condición ON, así como las filas que que cumplen la condición ON. En el campo donde no es coincidente la condición se coloca NULL.

SELECT RCTA.TRX_NUMBER,
       RCTA.COMMENTS,
       RCTA.INVOICE_CURRENCY_CODE,,
       XDT.CODE,
       XDT.DETAIL_NAME
  FROM APPS.RA_CUSTOMER_TRX_ALL RCTA
  FULL OUTER JOIN APPS.XX_DETAIL_TRX_ALL XDT
    ON RCTA.CUSTOMER_TRX_ID = XDT.CUSTOMER_TRX_ID

Combinación externa por la izquierda (Left Outer Join)
La combinación externa con LEFT  OUTER JOIN obtenemos todos los registros de en la tabla que situemos a la izquierda de la clausula JOIN. Devuelve las filas coincidentes más todas las filas de la tabla que se especifican a la izquierda de la palabra clave JOIN.

SELECT RCTA.TRX_NUMBER,
       RCTA.COMMENTS,
       RCTA.INVOICE_CURRENCY_CODE,,
       XDT.CODE,
       XDT.DETAIL_NAME
  FROM APPS.RA_CUSTOMER_TRX_ALL RCTA
  LEFT OUTER JOIN APPS.XX_DETAIL_TRX_ALL XDT
    ON RCTA.CUSTOMER_TRX_ID = XDT.CUSTOMER_TRX_ID


Combinación externa por la derecha (Right Outer Join)

Es lo contrario a Left Outer. La combinación con  RIGHT OUTER JOIN obtenemos el efecto contrario. Devuelve las filas coincidentes más todas las filas de la tabla que se especifican a la derecha de la palabra clave JOIN.

SELECT RCTA.TRX_NUMBER,
       RCTA.COMMENTS,
       RCTA.INVOICE_CURRENCY_CODE,,
       XDT.CODE,
       XDT.DETAIL_NAME
  FROM APPS.RA_CUSTOMER_TRX_ALL RCTA
  RIGHT OUTER JOIN APPS.XX_DETAIL_TRX_ALL XDT
    ON RCTA.CUSTOMER_TRX_ID = XDT.CUSTOMER_TRX_ID

No hay comentarios:

Publicar un comentario