Cómo Crear y Utilizar Uniones y Uniones SQL¶
Al crear objetos de negocio en la capa de lógica de negocios, a menudo es necesario dibujar en dos tablas separadas para mostrar datos de ambas. Con Vinyl, puede configurar un tipo Unión para combinar columnas de una o más tablas u objetos comerciales para crear un nuevo objeto comercial. Este artículo lo guiará a través de los cuatro tipos de uniones SQL admitidas en Vinyl: Interior, Exterior Izquierdo, Cruz y Exterior Derecho - y le brindará ejemplos sobre cómo crearlas y usarlas en Vinyl. Además, también veremos otro tipo de relación llamada Unión que está disponible para configuración en Uniones en Vinyl.
- Interior: el tipo de unión interna devuelve filas que existen en cada tabla.
- Cross - La unión cruzada produce un producto cartesiano
- Exterior izquierdo: una combinación externa izquierda devuelve todas las filas de la tabla izquierda especificada, independientemente de una coincidencia en la tabla derecha
- Exterior derecho: un exterior derecho devuelve todas las filas de la tabla derecha especificada, independientemente de una coincidencia en la tabla izquierda
- Unión - Combina el conjunto de resultados de dos o más declaraciones SELECT
Unir Internamente¶
¿qué Es una Unión Interna?¶
Las uniones internas son las uniones más utilizadas. Cuando se proporcionan dos tablas, el conjunto de resultados de una combinación interna contiene solo las filas entre las dos tablas que son iguales, según las columnas de combinación.
Ejemplo¶
Digamos que queremos un objeto de negocio de los clientes que han realizado un pedido y los detalles del pedido realizado. Este sería un excelente caso de uso para una combinación interna, porque una combinación interna puede devolver registros en la intersección de dos tablas. Nuestro conjunto resultante debe incluir cada CustomerID
eso tiene un OrderID
. A continuación se muestran las dos tablas. Customer
y Order
al que nos uniremos.
Antes de crear su unión interna, debe crear un objeto comercial. el nuestro se llama Customer (with Order)
. Introduzca las dos tablas en el panel Tablas. Desplegar la unión interna entre Customer
y Order
. La columna Unirse aquí es CustomerID
que es la única columna entre las dos que es igual.
El conjunto de resultados debe ser de los Clientes que han realizado pedidos. En este caso, nuestros datos resultaron en una fila:
Unión Cruzada¶
¿qué Es una Unión Cruzada?¶
Una Unión cruzada 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 será x * y filas.
Al intentar decidir qué tiene sentido con una unión cruzada, es útil decir que el conjunto resultante tendrá columnas de la tabla 1 para cada columna de la tabla 2.
Ejemplo¶
Tenemos dos mesas, Category
y Supplier
. Sabemos que cada Supplier
quisiera cada Category
, por lo que necesitamos crear 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 utilizar una unión cruzada.
A continuación se muestran registros de ejemplo para las tablas. Category
y Supplier
:
Para unir estas dos tablas, necesitamos crear un nuevo objeto de negocio. llamamos al nuestro Supplier (and Categories)
. Introduzca las dos tablas que nos gustaría unir de forma cruzada en el panel Tablas. En el panel Uniones, indique que desea una unión cruzada entre las dos tablas.
Nota
No necesitamos indicar columnas de Unir porque, con el Cross Join, las dos tablas no tienen que tener columnas en común para Unir. Todavía podemos conseguir un Category
para cada Supplier
.
Después de desplegar este Join, veremos resultados como este. Observe que hay un Category
para cada Supplier
:
Izquierda Combinación Externa¶
¿qué Es una Unión Externa Izquierda?¶
Una combinación externa izquierda recupera todas las filas coincidentes de dos tablas (la interna entre las dos) más las filas que no coinciden con ninguna fila de la segunda tabla. Esto es útil cuando desea que todos los resultados sean comunes entre dos tablas pero también desea los valores nulos en la tabla de la izquierda.
Ejemplo¶
Es posible que desee una lista de todos los clientes, ya sea que hayan realizado un pedido o no. En este caso, una unión exterior izquierda sería perfecta. Este ejemplo es similar al ejemplo anterior de Unión interna excepto que en este caso también queremos ver resultados donde hay una CustomerID
listado sin un OrderID
.
A continuación se muestran las tablas que estamos utilizando: Customer
y Order
. Son las mismas tablas que usamos para el ejemplo de Inner Join.
Esta declaración de objeto de negocio es muy similar al objeto de negocio del ejemplo de unión interna. La única diferencia es el nombre y la declaración de esta unión como unión externa izquierda en lugar de unión interna.
Los resultados nos dan los mismos resultados que nos dio Inner Join, más las filas en el Customer
tabla que no coincide con ninguna fila del Order
mesa.
Esta vez hay 92 resultados.
Exterior Derecho¶
¿qué Es una Unión Externa Derecha?¶
La tercera unión es una unión exterior derecha, que es justo lo opuesto a una unión exterior izquierda. Normalmente no importa usar uno u otro porque siempre puedes cambiar una tabla del lado izquierdo al derecho de la combinación y se logra el mismo efecto. Los resultados variarán según la combinación que elija y el orden de las tablas agregadas al panel Combinaciones.
Ejemplo¶
Como ejemplo de querer cambiar de una unión externa izquierda a una unión externa derecha, es posible que desee ver todos sus clientes con o sin pedidos, así como todos los detalles de los pedidos con o sin pedidos o productos. La siguiente declaración es una forma de configurar esta lógica.
Cuando ejecutamos los resultados o vemos los resultados de la cuadrícula rápida, vemos que se devuelven los siguientes registros:
Unión¶
¿qué Es una Unión?¶
En Vinyl, Union Joins produce una combinación de dos declaraciones seleccionadas que apuntan a la misma columna. Una combinación de unión combina los resultados de dos columnas diferentes (que tienen el mismo nombre) de dos tablas diferentes en una columna unificada. Si bien la mayoría de las uniones utilizan una columna de unión, la unión de unión no. Esto se debe a que otras uniones requieren un contexto compartido entre las dos tablas para funcionar, pero una unión de unión solo requiere columnas compartidas.
Ejemplo 1¶
Por ejemplo, una unión interna entre el Product
y Supplier
Las tablas mostrarían cada producto junto con su proveedor, mientras que una unión entre los Product
y Supplier
Las tablas le mostrarán una lista de todos los diferentes. SupplierID
campos. Esto se debe a que Union Join esencialmente muestra todos los resultados de la misma columna en dos tablas diferentes, y estas dos tablas solo comparten el SupplierID
. Recuerde que con las uniones, compartir contexto y tener la misma columna son dos criterios diferentes.
A continuación se muestran las dos tablas Proveedor y Producto.
Ahora puede crear su objeto comercial que utilizará Union Join. llamamos al nuestro Supplier (Union with Product)
. Introduzca las tablas que utilizará en el panel Tablas. Declare una unión entre las dos tablas en el panel Uniones. Nuevamente, esta unión no requiere columna de unión. El panel de Columnas sólo nos permite agregar SupplierID
como columna porque es la única columna que las dos tablas tienen en común.
El conjunto de resultados contiene todos los SupplierID
's, incluyendo registros duplicados si el SupplierID
aparece en ambas tablas.
Ejemplo 2¶
Otro caso de uso para una Unión es si un cliente le pide que encuentre a todos los encuestados, pero los usuarios pueden responder de varias maneras. Digamos que un usuario puede responder por correo que se ingresa en una tabla llamada EmailRespondants
, pero también pueden responder a través de una llamada telefónica usando el PhoneRespondant
mesa. 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 podrás ver lo mismo. RespondantID
varias veces pero poder ver cómo respondieron cada vez.