por: Greg Robidoux | actualizado: 2019-10-29 | Comentarios (4) / relacionado: 1 | 2 | 3 | 4 | 5 | Más > unir tablas
problema
A veces es necesario combinar datos de varias tablas o vistas en un conjunto de datos completo. Esto puede ser para tablas con datos similares dentro de la misma base de datos o tal vez haya una necesidad de combinar datos similares entre bases de datos o incluso entre servidores.
en este consejo echaremos un vistazo a cómo usar los comandos UNION vs.UNIONALL y cómo difieren.,
solución
en SQL Server tiene la capacidad de combinar varios conjuntos de datos en un solo conjunto de datos completo mediante el uso de los operadores UNION o UNION ALL. Hay una gran diferencia en cómo funcionan, así como en el conjunto de resultados finales que se devuelve, pero básicamente estos comandos unen múltiples conjuntos de datos que tienen estructuras similares en un conjunto de datos combinado.
UNION
esta operación le permitirá unir multipledatasets en un conjunto de datos y eliminará los duplicados que existan. Basicallyit está realizando una operación distinta en todas las columnas del conjunto de resultados.,
UNION ALL
esta operación nuevamente le permite unir conjuntos de datos múltiples en un conjunto de datos, pero no elimina ninguna fila duplicada.Debido a que esto no elimina las filas duplicadas, este proceso es más rápido, pero si no desea registros duplicados, deberá usar el operador UNION en su lugar.,la consulta h debe tener el mismo número de columnas
Consejo: Si no tiene exactamente las mismas columnas en todas las consultas use un valor predeterminado o un valor nulo como:
SELECT firstName, lastName, company FROM businessContactsUNIONSELECT firstName, lastName, NULL FROM nonBusinessContactsorSELECT firstName, lastName, createDate FROM businessContactsUNION ALLSELECT firstName, lastName, getdate() FROM nonBusinessContacts
Union vs., UNION ALL Examples
echemos un vistazo a algunos ejemplos simples de cómo funcionan estos comandos y cómo difieren. Como verá, los resultados finales serán diferentes, pero hay información interesante sobre cómo SQL Server realmente completa el proceso.
UNION ALL
en este primer ejemplo estamos utilizando el operador UNION ALL contra la Employeetable de la base de datos de AdventureWorks. Esto probablemente no es algo que usted haría, pero esto ayuda a ilustrar las diferencias de estos dos operadores.
hay 290 filas en la tabla dbo.Empleado.,
SELECT * FROM HumanResources.EmployeeUNION ALLSELECT * FROM HumanResources.EmployeeUNION ALLSELECT * FROM HumanResources.Employee
Cuando se ejecuta esta consulta, el conjunto de resultados tiene 870 filas. Estas son las 290 filas devueltas 3 veces. Los datos solo se juntan un conjunto de datos sobre el otro conjunto de datos.
Aquí está el plan de ejecución para esta consulta. Podemos ver que la tabla fue consultada3 veces y SQL Server hizo un paso de concatenación para concatenar todos los datos.
UNION
en este siguiente ejemplo, estamos utilizando el operador UNION contra la tabla de Empleados de la base de datos de AdventureWorks.,
SELECT * FROM HumanResources.EmployeeUNIONSELECT * FROM HumanResources.EmployeeUNIONSELECT * FROM HumanResources.Employee
Cuando se ejecuta esta consulta, el conjunto de resultados tiene 290 filas. A pesar de que combinamos losdatos tres veces, el operador de la Unión eliminó los registros duplicados y, por lo tanto, restableció solo las 290 filas únicas.
Aquí está el plan de ejecución para esta consulta. Podemos ver que SQL Server primero consultó2 de las tablas, luego hizo una operación de combinación para combinar las dos primeras tablas y luego hizo otra combinación junto con la consulta de la tercera tabla en la consulta.,Así que podemos ver que había mucho más trabajado que tuvo que ser realizado para obtener este resultset en comparación con la Unión todos.
UNION vs.UNION todos los ejemplos con Sort on Clustered Index Column
si llevamos esto un paso más allá y hacemos una especie de los datos usando la columna ClusteredIndex obtenemos estos planes de ejecución. A partir de esto podemos ver que el plan de ejecución que SQL Server está utilizando es idéntico para cada una de estas operaciones, aunque los conjuntos de resultados finales todavía contendrán 870 filas para la Unión ALL y 290 filas para la Unión.,
UNION ALL execution plan with sort on clustered index column
UNION execution plan with sort on clustered index column
UNION vs.UNION ALL Examples With Sort on Non-indexed Column
Aquí hay otro ejemplo haciendo lo mismo, pero esta vez haciendo una clasificación en una columna indexada. Como puede ver, los planes de ejecución son de nuevo idénticos para estas dos consultas, pero esta vez en lugar de usar una combinación, se utilizan una concatenación y operaciones de clasificación.,
- eche un vistazo a estos otros consejos que pueden ser útiles para usar los operadores de unión
- comparar múltiples conjuntos de datos con los operadores INTERSECTand EXCEPT
- SQL Server nomenclatura de cuatro partes
- Compare los resultados de SQL Server de dos consultas utilizando UNION
última actualización: 2019-10-29
acerca del autor
Leave a Reply