Respuestas:
UNIONelimina registros duplicados (donde todas las columnas en los resultados son iguales), UNION ALLno lo hace.
Hay un impacto en el rendimiento cuando se usa en UNIONlugar de UNION ALL, ya que el servidor de la base de datos debe hacer un trabajo adicional para eliminar las filas duplicadas, pero generalmente no desea los duplicados (especialmente al desarrollar informes).
SELECT 'foo' AS bar UNION SELECT 'foo' AS bar
Resultado:
+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)
SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar
Resultado:
+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)
Tanto UNION como UNION ALL concatenan el resultado de dos SQL diferentes. Se diferencian en la forma en que manejan los duplicados.
UNION realiza una DISTINCT en el conjunto de resultados, eliminando las filas duplicadas.
UNION ALL no elimina 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




UNIONelimina duplicados, mientras UNION ALLque no.
Para eliminar duplicados, el conjunto de resultados debe ordenarse, y esto puede tener un impacto en el rendimiento de UNION, dependiendo del volumen de datos que se ordenan y la configuración de varios parámetros RDBMS (para Oracle PGA_AGGREGATE_TARGETcon WORKAREA_SIZE_POLICY=AUTOo SORT_AREA_SIZEy SOR_AREA_RETAINED_SIZEsi WORKAREA_SIZE_POLICY=MANUAL).
Básicamente, la clasificación es más rápida si se puede llevar a cabo en la memoria, pero se aplica la misma advertencia sobre el volumen de datos.
Por supuesto, si necesita que los datos se devuelvan sin duplicados, debe usar UNION, dependiendo de la fuente de sus datos.
Hubiera comentado en la primera publicación para calificar el comentario "es mucho menos eficaz", pero no tengo suficiente reputación (puntos) para hacerlo.
En ORACLE: UNION no admite los tipos de columna BLOB (o CLOB), UNION ALL sí.
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/
Puede evitar duplicados y aún 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
Note la AND a!=Xparte. Esto es mucho más rápido que UNION.
UNION: UNIONtambién elimina los duplicados que devuelven las subconsultas, mientras que su enfoque no lo hará.
Solo para agregar mis dos centavos a la discusión aquí: uno podría entender al UNIONoperador como una UNIÓN pura, orientada al SET, por ejemplo, el conjunto A = {2,4,6,8}, el conjunto B = {1,2,3,4 }, UNIÓN B = {1,2,3,4,6,8}
Cuando se trata de conjuntos, no querrá que los números 2 y 4 aparezcan dos veces, ya que un elemento está o no en un conjunto.
Sin embargo, en el mundo de SQL, 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.
UNION ALLno es "ofrecido" por T-SQL. UNION ALLes parte del estándar ANSI SQL y no es específico de MS SQL Server.
UNIÓN
El UNIONcomando se usa para seleccionar información relacionada de dos tablas, de forma muy similar al JOINcomando. Sin embargo, cuando se usa el UNIONcomando, todas las columnas seleccionadas deben ser del mismo tipo de datos. Con UNION, solo se seleccionan valores distintos.
UNION ALL
El UNION ALLcomando es igual al UNIONcomando, excepto queUNION ALL selecciona todos los valores.
La diferencia entre Uniony Union alles que Union allno eliminará las filas duplicadas, en su lugar, solo extrae todas las filas de todas las tablas que se ajustan a los detalles de su consulta y las combina en una tabla.
Una UNIONdeclaración efectivamente hace un SELECT DISTINCTen el conjunto de resultados. Si sabe que todos los registros devueltos son únicos de su sindicato, en su UNION ALLlugar, use resultados más rápidos.
No estoy seguro de que importe qué base de datos
UNION y UNION ALL debería funcionar en todos los servidores SQL.
Debe evitar las innecesarias UNION, ya que son una gran pérdida de rendimiento. Como regla general, use UNION ALLsi no está seguro de cuál usar.
UNION: genera registros distintos ,
mientras que
UNION ALL: genera todos los registros, incluidos los duplicados.
Ambos son operadores de bloqueo y, por lo tanto, personalmente prefiero usar JOINS en lugar de operadores de bloqueo (UNION, INTERSECT, UNION ALL, etc.) en cualquier momento.
Para ilustrar por qué la operación de la Unión funciona mal en comparación con la comprobación de la Unión Todos en el siguiente ejemplo
CREATE TABLE #T1 (data VARCHAR(10))
INSERT INTO #T1
SELECT 'abc'
UNION ALL
SELECT 'bcd'
UNION ALL
SELECT 'cde'
UNION ALL
SELECT 'def'
UNION ALL
SELECT 'efg'
CREATE TABLE #T2 (data VARCHAR(10))
INSERT INTO #T2
SELECT 'abc'
UNION ALL
SELECT 'cde'
UNION ALL
SELECT 'efg'
A continuación se presentan los resultados de las operaciones UNION ALL y UNION.
Una declaración UNION efectivamente hace una SELECCIÓN DISTINTA en el conjunto de resultados. Si sabe que todos los registros devueltos son únicos de su sindicato, use UNION ALL en su lugar, da resultados más rápidos.
El uso de UNION da como resultado operaciones de clasificación diferenciadas en el plan de ejecución. La prueba para probar esta declaración se muestra a continuación:
UNION/ UNION ALL).
unionusando una combinación de joins y algunos muy desagradables cases, pero hace que la consulta maldito-casi imposible de leer y mantener, y en mi experiencia, es también terrible para el rendimiento. Comparar: en select foo.bar from foo union select fizz.buzz from fizzcontraselect case when foo.bar is null then fizz.buzz else foo.bar end from foo join fizz where foo.bar is null or fizz.buzz is null
union se usa para seleccionar valores distintos de dos tablas, donde como union all se usa para seleccionar todos los valores, incluidos los duplicados de las tablas
Es bueno entenderlo con un diagrama de Venn.
Aquí está el enlace a la fuente. Hay una buena descripción.
()mostrada por segunda vez. En realidad, pensándolo bien, porque el union allresultado no es un conjunto, ¡no debes intentar dibujarlo usando un diagrama de Venn!
(Del libro de Microsoft SQL Server en línea)
UNIÓN [TODOS]
Especifica que varios conjuntos de resultados se deben combinar y devolver como un único conjunto de resultados.
TODAS
Incorpora todas las filas en los resultados. Esto incluye duplicados. Si no se especifica, se eliminan las filas duplicadas.
UNIONtomará demasiado tiempo ya que DISTINCTse aplican filas duplicadas que se encuentran como similares en los resultados.
SELECT * FROM Table1
UNION
SELECT * FROM Table2
es equivalente a:
SELECT DISTINCT * FROM (
SELECT * FROM Table1
UNION ALL
SELECT * FROM Table2) DT
Un efecto secundario de aplicar
DISTINCTsobre resultados es una operación de clasificación de resultados.
UNION ALLLos resultados se mostrarán como un orden arbitrario en los resultados. Pero los UNIONresultados se mostrarán tal como se ORDER BY 1, 2, 3, ..., n (n = column number of Tables)aplican a los resultados. Puede ver este efecto secundario cuando no tiene ninguna fila duplicada.
Agrego un ejemplo,
UNION , se está fusionando con distinto -> más lento, porque necesita comparación (en el desarrollador de Oracle SQL, elija la consulta, presione F10 para ver el análisis de costos).
UNION ALL , se está fusionando sin distinción -> más rápido.
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;
y
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION ALL
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;
UNION combina el contenido de dos tablas estructuralmente compatibles en una sola tabla combinada.
La diferencia entre UNIONy UNION ALLes que UNION willomite registros duplicados, mientras UNION ALLque incluirá registros duplicados.
UnionEl conjunto de resultados se ordena en orden ascendente, mientras que el UNION ALLconjunto de resultados no se ordena
UNIONrealiza un DISTINCTen su conjunto de resultados para eliminar cualquier fila duplicada. Mientras UNION ALLque no eliminará duplicados y, por lo tanto, es más rápido que UNION. *
Nota : El rendimiento de UNION ALLnormalmente será mejor que UNION, ya que UNIONrequiere que el servidor haga el trabajo adicional de eliminar cualquier duplicado. Por lo tanto, en los casos en que es seguro que no habrá duplicados, o donde tener duplicados no es un problema, UNION ALLse recomienda su uso por razones de rendimiento.
ORDER BY, los resultados ordenados no están garantizados. Tal vez tenga en mente un proveedor SQL en particular (incluso entonces, ¿en orden ascendente qué exactamente ...?), Pero esta pregunta no tiene etiquetas específicas de proveedor =.
Supongamos que tiene dos mesas Profesor y Alumno
Ambos tienen 4 columnas con diferentes nombres como este
Teacher - ID(int), Name(varchar(50)), Address(varchar(50)), PositionID(varchar(50))
Student- ID(int), Name(varchar(50)), Email(varchar(50)), PositionID(int)
Puede aplicar UNION o UNION ALL para esas dos tablas que tienen el mismo número de columnas. Pero tienen diferente nombre o tipo de datos.
Cuando aplica la UNIONoperación en 2 tablas, descuida todas las entradas duplicadas (el valor de todas las columnas de la fila en una tabla es el mismo de otra tabla). Me gusta esto
SELECT * FROM Student
UNION
SELECT * FROM Teacher
el resultado será
Cuando aplica la UNION ALLoperación en 2 tablas, devuelve todas las entradas con duplicado (si hay alguna diferencia entre cualquier valor de columna de una fila en 2 tablas). Me gusta esto
SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher
Actuación:
Obviamente, UNION ALL es mejor que UNION, ya que realizan tareas adicionales para eliminar los valores duplicados. Puede verificar eso desde el Tiempo estimado de ejecución presionando ctrl + L en MSSQL
UNIONpara transmitir la intención (es decir, sin duplicados) porque UNION ALLes poco probable que brinde una ganancia de rendimiento en la vida real en términos absolutos.
En palabras muy simples, la diferencia entre UNION y UNION ALL es que UNION omitirá registros duplicados, mientras que UNION ALL incluirá registros duplicados.
Una cosa más que me gustaría agregar
Unión : - El conjunto de resultados se ordena en orden ascendente.
Union All : - El conjunto de resultados no está ordenado. dos resultados de la consulta solo se agregan.
UNIONvoluntad NO Ordenar el resultado en orden ascendente. Cualquier pedido que vea en un resultado sin usar order byes pura coincidencia. El DBMS es libre de usar cualquier estrategia que considere eficiente para eliminar los duplicados. Esto podría estar ordenando, pero también podría ser un algoritmo de hash o algo completamente diferente, y la estrategia cambiará con el número de filas. Una unionque aparece ordenada con 100 filas podría no estar con 100,000 filas
ORDER BYcláusula apropiada .
Diferencia entre Union Vs Union ALL en SQL
¿Qué es la unión en SQL?
El operador UNION se utiliza para combinar el conjunto de resultados de dos o más conjuntos de datos.
Each SELECT statement within UNION must have the same number of columns
The columns must also have similar data types
The columns in each SELECT statement must also be in the same order
¡Importante! Diferencia entre Oracle y Mysql: Digamos que t1 t2 no tienen filas duplicadas entre ellas, pero tienen filas duplicadas individuales. Ejemplo: t1 tiene ventas de 2017 y t2 de 2018
SELECT T1.YEAR, T1.PRODUCT FROM T1
UNION ALL
SELECT T2.YEAR, T2.PRODUCT FROM T2
En ORACLE UNION ALL recupera todas las filas de ambas tablas. Lo mismo ocurrirá en MySQL.
Sin embargo:
SELECT T1.YEAR, T1.PRODUCT FROM T1
UNION
SELECT T2.YEAR, T2.PRODUCT FROM T2
En ORACLE , UNION recupera todas las filas de ambas tablas porque no hay valores duplicados entre t1 y t2. ¡Por otro lado, en MySQL el conjunto de resultados tendrá menos filas porque habrá filas duplicadas dentro de la tabla t1 y también dentro de la tabla t2!
UNION elimina registros duplicados en cambio, UNION ALL no lo hace. Pero uno debe verificar la mayor parte de los datos que se procesarán y la columna y el tipo de datos deben ser los mismos.
dado que union utiliza internamente un comportamiento "distinto" para seleccionar las filas, por lo tanto, es más costoso en términos de tiempo y rendimiento. me gusta
select project_id from t_project
union
select project_id from t_project_contact
esto me da registros 2020
por otra parte
select project_id from t_project
union all
select project_id from t_project_contact
me da más de 17402 filas
en perspectiva de precedencia ambos tienen la misma precedencia.
Si no es así ORDER BY, a UNION ALLpuede recuperar las filas a medida que avanza, mientras que a UNIONlo haría esperar hasta el final de la consulta antes de darle todo el conjunto de resultados a la vez. Esto puede marcar la diferencia en una situación de tiempo de espera: a UNION ALLmantiene viva la conexión, por así decirlo.
Entonces, si tiene un problema de tiempo de espera y no hay clasificación, y los duplicados no son un problema, UNION ALLpuede ser bastante útil.
UNION y UNION ALL solían combinar dos o más resultados de consulta.
El comando UNION selecciona información distinta y relacionada de dos tablas que eliminará las filas duplicadas.
Por otro lado, el comando UNION ALL selecciona todos los valores de ambas tablas, que muestra todas las filas.
Como hábito, siempre use UNION ALL . Use solo UNION en casos especiales cuando necesite eliminar duplicados que pueden ser extremadamente desordenados y puede leer todo en los otros comentarios aquí.
UNION ALLTambién funciona en más tipos de datos. Por ejemplo, cuando se intenta unir tipos de datos espaciales. Por ejemplo:
select a.SHAPE from tableA a
union
select b.SHAPE from tableB b
arrojará
The data type geometry cannot be used as an operand to the UNION, INTERSECT or EXCEPT operators because it is not comparable.
Sin embargo union allno lo hará.
La única diferencia es:
"UNION" elimina filas duplicadas.
"UNION ALL" no elimina filas duplicadas.