Pregunta ¿Cuál es la diferencia entre UNION y UNION ALL?


Cuál es la diferencia entre UNION y UNION ALL?


1112
2017-09-08 15:19


origen


Respuestas:


UNION elimina registros duplicados (donde todas las columnas en los resultados son las mismas), UNION ALL no.

Hay un golpe de rendimiento cuando se usa UNION en lugar de UNION ALL, ya que el servidor de la base de datos debe realizar un trabajo adicional para eliminar las filas duplicadas, pero generalmente no desea los duplicados (especialmente al desarrollar informes).

UNIÓN Ejemplo:

SELECT 'foo' AS bar UNION SELECT 'foo' AS bar

Resultado: 

+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)

UNION TODO el ejemplo:

SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar

Resultado:

+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)

1371
2017-10-14 16:09



Tanto UNION como UNION ALL concatenan el resultado de dos SQL diferentes. Difieren en la forma en que manejan los duplicados.

  • UNION realiza una DISTINCT en el conjunto de resultados, eliminando cualquier fila duplicada.

  • UNION ALL no elimina los duplicados y, por lo tanto, es más rápido que UNION.

Nota: Al usar estos comandos, todas las columnas seleccionadas deben ser del mismo tipo de datos.

Ejemplo: si tenemos dos tablas, 1) Empleado y 2) Cliente

  1. Datos de la tabla del empleado:

enter image description here

  1. Datos de la tabla del cliente:

enter image description here

  1. Ejemplo de UNIÓN (Elimina todos los registros duplicados):

enter image description here

  1. UNION TODO Ejemplo (Simplemente concatena registros, no elimina duplicados, por lo que es más rápido que UNION):

enter image description here


234
2017-09-18 12:34



UNION elimina duplicados, mientras que UNION ALL no.

Para eliminar duplicados, se debe ordenar el conjunto de resultados, y esto mayo tener un impacto en el rendimiento de la UNION, dependiendo del volumen de datos que se están ordenando, y la configuración de varios parámetros de RDBMS (Para Oracle PGA_AGGREGATE_TARGET con WORKAREA_SIZE_POLICY=AUTO o SORT_AREA_SIZE y SOR_AREA_RETAINED_SIZE Si WORKAREA_SIZE_POLICY=MANUAL )

Básicamente, el tipo es más rápido si se puede llevar a cabo en la memoria, pero se aplica la misma advertencia sobre el volumen de datos.

Por supuesto, si necesita datos devueltos sin duplicados, entonces debe usa UNION, dependiendo de la fuente de tus datos.

Hubiera comentado la primera publicación para calificar el comentario "es mucho menos eficiente", pero no tengo la reputación (puntos) suficiente para hacerlo.


42
2017-09-08 17:10



En ORACLE: UNION no admite los tipos de columnas BLOB (o CLOB), UNION ALL lo hace.


27
2017-09-08 15:20



La diferencia básica entre UNION y UNION ALL es que la operación de unión elimina las filas duplicadas del conjunto de resultados, pero union all devuelve todas las filas después de unirse.

de http://zengin.wordpress.com/2007/07/31/union-vs-union-all/


18
2017-08-13 00:03



Puede evitar duplicados y aún así ejecutar mucho más rápido que UNION DISTINCT (que en realidad es lo mismo que UNION) ejecutando una consulta como esta:

SELECT * FROM mytable WHERE a=X UNION ALL SELECT * FROM mytable WHERE b=Y AND a!=X

Observe la AND a!=X parte. Esto es mucho más rápido que UNIÓN.


12
2018-06-06 09:55



Solo para agregar mis dos centavos a la discusión aquí: uno podría entender el UNION operador como una UNIÓN pura orientada a SET, p. establecer A = {2,4,6,8}, establecer B = {1,2,3,4}, UNIÓN B = {1,2,3,4,6,8}

Al tratar con conjuntos, no querría que los números 2 y 4 aparezcan dos veces, como un elemento es o no es en un conjunto.

En el mundo de SQL, sin embargo, es posible que desee ver todos los elementos de los dos conjuntos juntos en una "bolsa" {2,4,6,8,1,2,3,4}. Y para este propósito, T-SQL ofrece al operador UNION ALL.


12
2017-08-16 16:50