Cómo crear y usar uniones y joins SQL en Jitterbit App Builder
Al crear Objetos de Negocio en la Capa de Lógica de Negocio, a menudo es necesario consultar dos tablas separadas para mostrar datos de ambas. Con App Builder, se puede configurar un tipo de Join para combinar columnas de una o más tablas, o Objetos de Negocio, para crear un nuevo Objeto de Negocio. Este artículo te guiará a través de los cuatro tipos de Joins SQL soportados en App Builder - Inner, Left Outer, Cross y Right Outer - y dará ejemplos sobre cómo crearlos y usarlos en App Builder. Además, también echaremos un vistazo a otro tipo de relación llamada Union que está disponible para configuración bajo Joins en App Builder.
- Inner - El tipo de Inner Join devuelve filas que existen en cada tabla
- Cross - El Cross Join produce un Producto Cartesiano
- Left Outer - Un Left Outer Join devuelve todas las filas de la tabla izquierda especificada, independientemente de una coincidencia en la tabla derecha
- Right Outer - Un Right Outer devuelve todas las filas de la tabla derecha especificada, independientemente de una coincidencia en la tabla izquierda
- Union - Combina el conjunto de resultados de dos o más declaraciones SELECT
Inner join
¿Qué es un inner join?
Los Inner Joins son el tipo de Join más utilizado. Cuando se tienen dos tablas, el conjunto de resultados de un Inner Join contiene solo las filas entre las dos tablas que son iguales, basándose en las columnas de Join.
Ejemplo
Supongamos que queremos un Objeto de Negocio de clientes que han realizado un pedido y los detalles del pedido realizado. Este sería un gran caso de uso para un Inner Join, porque un Inner Join puede devolver registros en la intersección de dos tablas. Nuestro conjunto resultante debería incluir cada CustomerID
que tenga un OrderID
. A continuación se muestran las dos tablas Customer
y Order
que vamos a unir.
Antes de crear tu Inner Join, necesitas hacer un Objeto de Negocio. El nuestro se llama Customer (with Order)
. Lleva las dos tablas al panel de Tablas. Implementa el Inner Join entre Customer
y Order
. La columna de Join aquí es CustomerID
, que es la única columna entre las dos que es la misma.
El conjunto de resultados debería ser de los Clientes que han realizado Pedidos. En este caso, nuestros datos resultaron en una fila:
Cross join
¿Qué es un cross join?
Un Cross Join produce un conjunto de resultados que es el número de filas x en la primera tabla multiplicado por el número de filas y en la segunda tabla. El conjunto de resultados tendrá x * y filas.
Al intentar decidir qué tiene sentido con un Cross Join, ayuda decir que el conjunto resultante tendrá columnas de la tabla 1 para cada columna en la tabla 2.
Ejemplo
Tenemos dos tablas, Category
y Supplier
. Sabemos que cada Supplier
querría cada Category
, así que necesitamos hacer un Objeto de Negocio que combine estas dos tablas. Nos gustaría un conjunto resultante que tenga un Category
para cada Supplier
. Este es un ejemplo perfecto de cuándo usar un Cross Join.
A continuación se muestran registros de ejemplo para las tablas Category
y Supplier
:
Para hacer un Cross Join entre estas dos tablas, necesitamos crear un nuevo Objeto de Negocio. El nuestro se llama Supplier (and Categories)
. Lleva las dos tablas que nos gustaría Cross Join al panel de Tablas. En el panel de Joins, indica que te gustaría un Cross Join entre las dos tablas.
Nota
No es necesario indicar las columnas de unión porque, con el Cross Join, las dos tablas no tienen que tener columnas en común para unirse. Aún podemos obtener una Category
para cada Supplier
.
Después de implementar esta unión, veremos resultados como este. Nota que hay una Category
para cada Supplier
:
Left outer join
What is a left outer join?
Un Left Outer Join obtiene todas las filas coincidentes de dos tablas (las internas entre las dos) más las filas que no coinciden con ninguna fila en la segunda tabla. Esto es útil cuando se desean todos los resultados comunes entre dos tablas, pero también se quieren los valores nulos en la tabla izquierda.
Example
Puede que desee una lista de todos los clientes, ya sea que hayan realizado un pedido o no. En este caso, un Left Outer Join sería perfecto. Este ejemplo es similar al ejemplo anterior de Inner Join, excepto que en este caso también queremos ver resultados donde hay un CustomerID
listado sin un OrderID
.
A continuación se presentan las tablas que estamos utilizando: Customer
y Order
. Son las mismas tablas que usamos para el ejemplo de un Inner Join.
Esta declaración de Objeto de Negocio es muy similar a la del objeto de negocio del ejemplo de Inner Join. La única diferencia es el nombre y declarar esta unión como un Left Outer en lugar de un Inner Join.
Los resultados nos dan los mismos resultados que nos dio el Inner Join, más las filas en la tabla Customer
que no coinciden con ninguna fila en la tabla Order
.
Hay 92 resultados esta vez.
Right outer
What is a right outer join?
El tercer join es un Right Outer Join, que es justo lo opuesto a un Left Outer. Usar uno u otro generalmente no importa porque siempre se puede cambiar una tabla del lado izquierdo al derecho del join y se logra el mismo efecto. Los resultados variarán dependiendo de qué join elijas y el orden de las tablas añadidas al panel de Joins.
Example
Como un ejemplo de querer cambiar de un Left Outer Join a un Right Outer Join, puede que desees ver todos tus Clientes con o sin Pedidos, así como todos los Detalles de Pedido con o sin Pedidos o Productos. La declaración a continuación es una forma en que podrías configurar esta lógica.
Cuando ejecutamos resultados, o vemos los resultados de la cuadrícula rápida, vemos los siguientes registros devueltos:
Union
What is a union?
En App Builder, los Union Joins producen una combinación de dos declaraciones select que apuntan a la misma Columna. Un Union Join combina los resultados de dos Columnas diferentes (que tienen el mismo nombre) de dos Tablas diferentes en una Columna unificada. Mientras que la mayoría de los Joins utilizan una columna de Join, el Union Join no lo hace. Esto se debe a que otros Joins requieren un contexto compartido entre las dos tablas para funcionar, pero un Union Join solo requiere columnas compartidas.
Ejemplo 1
Por ejemplo, un Inner Join entre las tablas Product
y Supplier
mostraría cada producto junto con su proveedor, mientras que un Union Join entre las tablas Product
y Supplier
te mostraría una lista de todos los diferentes campos SupplierID
. Esto se debe a que el Union Join esencialmente muestra todos los resultados de la misma columna en dos tablas diferentes, y estas dos tablas solo comparten el SupplierID
. Recuerda que con los Joins, compartir contexto y tener la misma columna son dos criterios diferentes.
A continuación se presentan las dos tablas Supplier y Product.
Ahora puedes crear tu Objeto de Negocio que utilizará el Union Join. Nosotros lo llamamos Supplier (Union con Product)
. Lleva las tablas que utilizarás al panel de Tablas. Declara un Union entre las dos tablas en el panel de Joins. Nuevamente, este Join no requiere Join Column. El panel de Columns solo nos permite agregar SupplierID
como una columna porque es la única columna que las dos tablas tienen en común.
El conjunto de resultados contiene todos los SupplierID
, incluidos los registros duplicados si el SupplierID
aparece en ambas tablas.
Ejemplo 2
Otro caso de uso para un Union es si un cliente te pide que encuentres todos los encuestados, pero los usuarios pueden responder de múltiples maneras. Supongamos que un usuario puede responder por correo electrónico, que se ingresa en una tabla llamada EmailRespondants
, pero también puede responder a través de una llamada telefónica utilizando la tabla PhoneRespondant
. Podrías unir las tablas para encontrar las columnas que tienen en común, que podrían ser RespondantID
y RespondType
, para recibir una lista de todas las personas que han respondido y cómo respondieron. De esta manera, también puedes ver el mismo RespondantID
múltiples veces, pero podrás ver cómo respondieron cada vez.