Menú de navegaciónMenú
Categorías

La mejor forma de Aprender Programación online y en español www.campusmvp.es

?id=e5abea90-f20b-4c9a-baed-18d3d4ccc1b8

Combinar consultas iguales en SQL: los operadores UNION y UNION ALL

BasesDeDatos-OptimizacionEn el lenguaje de consulta de datos SQL estándar, el operador UNION sirve para combinar los resultados de dos consultas independientes, devolviendo como resultado conjunto todos los registros obtenidos por ambas.

Evidentemente, para poder realizar la unión ambas consultas deben devolver exactamente los mismos campos, tanto sus nombres como el tipo de dato. Lo que no es necesario es que se obtengan de la misma manera. Es decir, unos podrían ser campos directos obtenidos de una consulta a una tabla, y los de la segunda parte podrían ser campos calculados. Mientras tengan el mismo nombre y tipo no hay problema.

Así en el caso más sencillo, por ejemplo, si tenemos dos tablas de información con datos de ventas separados por divisiones, algo como esto (en dos tablas diferentes):

image

image

Podemos escribir una consulta como esta:

SELECT Comercial, Venta FROM VentasSoftware
UNION
SELECT Comercial, Venta FROM VentasConsultoria

Para obtener el resultado combinado de ambas tablas:

image

Aquí hay un detalle importante. Si nos fijamos en estos resultados veremos que Pepe, que está en ambas tablas con el mismo valor de ventas, solo aparece una vez. Y es que UNION evita que haya registros duplicados en el resultado final. O sea, elimina las filas duplicadas en las que todos los valores de los campos son iguales.

Si queremos obtener la mezcla total, incluso con duplicados, debemos usar UNION ALL:

SELECT Comercial, Venta FROM VentasSoftware
UNION ALL
SELECT Comercial, Venta FROM VentasConsultoria

que en este caso nos devuelve:

image

En este caso vemos como el comercial "Pepe" está dos veces.

Además de esta evidente, existe otra diferencia muy importante entre ambos métodos: UNION ALL ofrece mucho más rendimiento que UNION. El motivo es que al no tener que discriminar los registros repetidos el proceso es mucho más simple. En consultas habituales de pocos registros no lo vamos a notar, pero en grandes consultas con muchos posibles resultados sí.

Además, si estamos seguros de que los dos conjuntos de resultados que vamos a unir no tienen datos comunes (o no nos importa), es mejor recurrir siempre a UNION ALL por este motivo.

José Manuel Alarcón Fundador de campusMVP, es ingeniero industrial y especialista en consultoría de empresa. Ha escrito diversos libros, habiendo publicado hasta la fecha cientos de artículos sobre informática e ingeniería en publicaciones especializadas. Puedes seguirlo en Twitter en @jm_alarcon o leer sus blog técnico o personal. Ver todos los posts de José Manuel Alarcón

No te pierdas ningún post

Únete gratis a nuestro canal en Telegram y te avisaremos en el momento en el que publiquemos uno nuevo.

Archivado en: Acceso a Datos

La mejor formación online para desarrolladores como tú

Comentarios (6) -

Una pregunta y si necesitamos que el campo por ejemplo PEPE aparezca una sola vez pero sumando los resultados?. Veras tengo que sumar los resultados de 2 consultas que son de 2 bases de datos diferentes. Ambas bases tienen la misma estructura y por separado la consulta funciona perfecto, pero no logro hacer que combine los resultados y los sume.

Responder

Puedes hacer un GROUP BY por ese campo por ejemplo, depende de la situación que se te presente.

Responder

Hola

Como puedo hacer para unir registros duplicados y que los campos repetidos esten separados.

Por ejemplo
Code| Nombre |Categoría|
123 | Danny Velasquez | Empleado |
123 | Danny Velasquez | Graduado|
123 | Danny Velasquez | Donante |
124 | Danny Cadenas | Empleado |
124 | Danny Cadenas| Graduado|
|

Lo que necesito es que se visualice así

Code| Nombre | Empleado | Graduado | Donante |
---------------------------------------------------------------
123 | Danny Velasquez | 1| 1| 1|
124 | Danny Cadenas | 1 | 1 | 0

o

Code| Nombre | Empleado | Graduado | Donante |
---------------------------------------------------------------
123 | Danny Velasquez | Empleado | Graduado | Donante
124 | Danny Cadenas | Empleado | Graduado | 0

Agradeceré mucho su apoyo.

Saludos,




Responder

Hola estimado.
Primero que  nada, muchas gracias por explicar los procedimientos de unión que los encuentro fascinante, pero como puedo que todos los valores que aparecen tengan el (.) del separador de miles y con los decimales que yo necesite?

Responder

Muy Bueno (y)

Responder

Hola muy util la respuesta, gracias

Responder

Agregar comentario

Los datos anteriores se utilizarán exclusivamente para permitirte hacer el comentario y, si lo seleccionas, notificarte de nuevos comentarios en este artículo, pero no se procesarán ni se utilizarán para ningún otro propósito. Lee nuestra política de privacidad.