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).
Ejemplo de UNION:
SELECT'foo'AS bar UNIONSELECT'foo'AS bar
Resultado:
+-----+| bar |+-----+| foo |+-----+1rowinset(0.00 sec)
UNIÓN TODO ejemplo:
SELECT'foo'AS bar UNIONALLSELECT'foo'AS bar
Resultado:
+-----+| bar |+-----+| foo || foo |+-----+2rowsinset(0.00 sec)
La implicación de esto es que la unión es mucho menos eficaz ya que debe escanear el resultado en busca de duplicados
Matthew Watson
19
UNION ALL será más eficaz, específicamente debido a la falta del tipo distinto. Mi práctica general es usar UNION ALL a menos que específicamente quiera duplicados.
Adam Caviness
66
Acabo de dar cuenta de que hay una gran cantidad de buenos comentarios / respuestas aquí, así que di vuelta en la bandera wiki y añadió una nota sobre el rendimiento ...
Jim Harte
250
UNION ALL puede ser más lento que UNION en casos del mundo real donde la red, como Internet, es un cuello de botella. El costo de transferir muchas filas duplicadas puede exceder el beneficio del tiempo de ejecución de la consulta. Esto debe analizarse caso por caso.
Charles Burns
23
@AdamCaviness Tu comentario no tiene mucho sentido.
kojow7
285
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
Datos de la tabla de empleados:
Datos de la tabla del cliente:
Ejemplo de UNION (elimina todos los registros duplicados):
Ejemplo de UNION ALL (solo concatena registros, no elimina duplicados, por lo que es más rápido que UNION):
"todas las columnas seleccionadas deben ser del mismo tipo de datos"; en realidad, las cosas no son tan estrictas (¡no es algo bueno desde el punto de vista del modelo relacional!). El estándar SQL dice que su descriptor de columna respectivo debe ser el mismo, excepto en el nombre.
cuando el
47
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.
"Para eliminar duplicados, el conjunto de resultados debe estar ordenado": tal vez tenga en mente a un proveedor en particular, pero no hay etiquetas específicas del proveedor en la pregunta. Incluso si lo hubiera, ¿podría probar que los duplicados no se pueden eliminar sin ordenar?
cuando el
2
distinct "implícitamente" clasificará los resultados, porque eliminar duplicados es más rápido en un conjunto ordenado. Esto no significa que el conjunto de resultados devuelto esté realmente ordenado de esa manera, pero en la mayoría de los casos distintos (y por lo tanto, UNION) clasificarán internamente el conjunto de resultados.
DevilSuichiro
30
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.
Esto omitirá filas y, por lo tanto, no producirá el resultado esperado si a contiene valores NULL. Además, todavía no devuelve el mismo resultado que a UNION: UNIONtambién elimina los duplicados que devuelven las subconsultas, mientras que su enfoque no lo hará.
Frank Schmitt
@FrankSchmitt: gracias por esta respuesta; ¡Este bit sobre subconsultas es exactamente lo que quería saber!
Doradus
11
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.
Nitpick: UNION ALLno es "ofrecido" por T-SQL. UNION ALLes parte del estándar ANSI SQL y no es específico de MS SQL Server.
Frank Schmitt
1
El comentario 'Nitpick' podría implicar que no puede usar "Union All" en TSQL, pero puede hacerlo. Por supuesto, el comentario no dice eso, pero alguien que lo lea puede inferirlo.
JosephDoggie
10
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 hay una etiqueta de SQL Server en esta pregunta. Creo que la opción que devuelve duplicados solo porque normalmente funciona mejor es el consejo equivocado.
cuando el
1
@onedaywhen supongo que el OP utilizó la frase "Servidores SQL" como sinónimo de todos los RDBMS (por ejemplo, MySQL, PostGreSQL, Oracle, SQL Server). Sin embargo, la redacción es desafortunada (y, por supuesto, podría estar equivocado).
Frank Schmitt
@FrankSchmitt: ninguno de los productos que enumeró son realmente RDBMS :)
cuando el
1
@onedaywhen cuidado de elaborar? Al menos en.wikipedia.org/wiki/Relational_database_management_system parece estar de acuerdo conmigo: menciona explícitamente Microsoft SQL Server, Oracle Database y MySQL. ¿O eres quisquilloso con la diferencia entre Oracle y Oracle Database, por ejemplo?
Frank Schmitt
8
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
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:
Todo en esta respuesta ya se ha dicho, es demasiado confuso para ser útil (sugiriendo uniones sobre sindicatos cuando hacen cosas diferentes, dando "bloqueo" como una razón sin explicar qué quiere decir con eso o a qué servidores de bases de datos se aplica), o es muy engañoso (sus porcentajes en su captura de pantalla no son aplicables al uso real real de UNION/ UNION ALL).
Los operadores de bloqueo son operadores bien conocidos en TSQL. Todo lo que hacen los operadores de bloqueo se puede lograr con Joins pero no al revés. La operación de clasificación distinta se encierra en un círculo en la imagen para mostrar por qué la unión funciona mejor que la unión y también para mostrar exactamente dónde existe en el plan de ejecución. ¡Siéntase libre de agregar más datos a las tablas T1 y T2 para jugar con los porcentajes!
DBA
Usted puede técnicamente producir los resultados de una 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
Devin Lamothe
@DBA Su respuesta solo es relevante para los usuarios de MS SQL Server. El OP nunca mencionó el RDBMS que están usando; podrían estar usando MySQL, PostgreSQL, Oracle, SQLite, ...
Frank Schmitt
6
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
Su segunda imagen sugiere que los dos son mutuamente excluyentes cuando no lo son. La imagen debería mostrar lo mismo que la primera pero con la 'intersección elipse' ()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!
cuando el
5
(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.
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.
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.
UNION combina el contenido de dos tablas estructuralmente compatibles en una sola tabla combinada.
Diferencia:
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.
"El conjunto de resultados de la Unión se ordena en orden ascendente": a menos que haya un 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 =.
cuando el
"combina el contenido de dos tablas estructuralmente compatibles" - Creo que has dicho esta parte muy bien :)
cuando el
2
Supongamos que tiene dos mesas Profesor y Alumno
Ambos tienen 4 columnas con diferentes nombres como este
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
UNIONSELECT*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
UNIONALLSELECT*FROM Teacher
Salida
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
De Verdad? ¿Por un resultado de cuatro filas? Creo que este es un escenario en el que desearía utilizar 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.
cuando el
2
En palabras muy simples, la diferencia entre UNION y UNION ALL es que UNION omitirá registros duplicados, mientras que UNION ALL incluirá registros duplicados.
Cierto ! UNION podría cambiar el orden de los dos subresultados.
Gracchus
66
Esto está mal. Una 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
a_horse_with_no_name
2
Sin una cláusula ORDER BY en la consulta, el RDBMS es libre de devolver las filas en cualquier secuencia. La observación de que el conjunto de resultados de una operación UNION se devuelve "en orden ascendente" es solo un subproducto de una operación de "clasificación única" realizada por la base de datos. El comportamiento observado no está garantizado. Así que no confíes en ello. Si la especificación es devolver filas en un orden particular, entonces agregue una ORDER BYcláusula apropiada .
spencer7593
1
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 withinUNION 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
UNIONALLSELECT 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
UNIONSELECT 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
unionselect project_id from t_project_contact
esto me da registros 2020
por otra parte
select project_id from t_project
unionallselect 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.
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í.
¿Cómo agrega esto algún valor en comparación con la respuesta aceptada?
Nick
@ Nick Es una respuesta más corta.
Mostafa Vatanpour
Más breve podría ser una ventaja si tuviera que leer una parte significativa de la respuesta aceptada para obtener estos datos. Pero en este caso, la respuesta aceptada contiene toda esta información en la primera oración, luego de lo cual continúa discutiendo las implicaciones de la diferencia en detalle.
Respuestas:
UNION
elimina registros duplicados (donde todas las columnas en los resultados son iguales),UNION ALL
no lo hace.Hay un impacto en el rendimiento cuando se usa en
UNION
lugar deUNION 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).Ejemplo de UNION:
Resultado:
UNIÓN TODO ejemplo:
Resultado:
fuente
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.
Ejemplo: si tenemos dos tablas, 1) Empleado y 2) Cliente
fuente
UNION
elimina duplicados, mientrasUNION ALL
que 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_TARGET
conWORKAREA_SIZE_POLICY=AUTO
oSORT_AREA_SIZE
ySOR_AREA_RETAINED_SIZE
siWORKAREA_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.
fuente
En ORACLE: UNION no admite los tipos de columna BLOB (o CLOB), UNION ALL sí.
fuente
de http://zengin.wordpress.com/2007/07/31/union-vs-union-all/
fuente
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!=X
parte. Esto es mucho más rápido que UNION.fuente
UNION
:UNION
tambié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
UNION
operador 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
.fuente
UNION ALL
no es "ofrecido" por T-SQL.UNION ALL
es parte del estándar ANSI SQL y no es específico de MS SQL Server.UNIÓN
El
UNION
comando se usa para seleccionar información relacionada de dos tablas, de forma muy similar alJOIN
comando. Sin embargo, cuando se usa elUNION
comando, todas las columnas seleccionadas deben ser del mismo tipo de datos. ConUNION
, solo se seleccionan valores distintos.UNION ALL
El
UNION ALL
comando es igual alUNION
comando, excepto queUNION ALL
selecciona todos los valores.La diferencia entre
Union
yUnion all
es queUnion all
no 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
UNION
declaración efectivamente hace unSELECT DISTINCT
en el conjunto de resultados. Si sabe que todos los registros devueltos son únicos de su sindicato, en suUNION ALL
lugar, use resultados más rápidos.fuente
UNION
yUNION 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, useUNION ALL
si no está seguro de cuál usar.fuente
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
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:
fuente
UNION
/UNION ALL
).union
usando una combinación dejoin
s y algunos muy desagradablescase
s, pero hace que la consulta maldito-casi imposible de leer y mantener, y en mi experiencia, es también terrible para el rendimiento. Comparar: enselect foo.bar from foo union select fizz.buzz from fizz
contraselect 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
fuente
Es bueno entenderlo con un diagrama de Venn.
Aquí está el enlace a la fuente. Hay una buena descripción.
fuente
()
mostrada por segunda vez. En realidad, pensándolo bien, porque elunion all
resultado 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]
TODAS
UNION
tomará demasiado tiempo ya queDISTINCT
se aplican filas duplicadas que se encuentran como similares en los resultados.es equivalente a:
UNION ALL
Los resultados se mostrarán como un orden arbitrario en los resultados. Pero losUNION
resultados se mostrarán tal como seORDER 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.fuente
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.
y
fuente
UNION
combina el contenido de dos tablas estructuralmente compatibles en una sola tabla combinada.La diferencia entre
UNION
yUNION ALL
es queUNION will
omite registros duplicados, mientrasUNION ALL
que incluirá registros duplicados.Union
El conjunto de resultados se ordena en orden ascendente, mientras que elUNION ALL
conjunto de resultados no se ordenaUNION
realiza unDISTINCT
en su conjunto de resultados para eliminar cualquier fila duplicada. MientrasUNION ALL
que no eliminará duplicados y, por lo tanto, es más rápido queUNION
. *Nota : El rendimiento de
UNION ALL
normalmente será mejor queUNION
, ya queUNION
requiere 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 ALL
se recomienda su uso por razones de rendimiento.fuente
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
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
UNION
operació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 estoel resultado será
Cuando aplica la
UNION ALL
operació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 estoSalida
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
fuente
UNION
para transmitir la intención (es decir, sin duplicados) porqueUNION ALL
es 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.
fuente
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.
fuente
UNION
voluntad NO Ordenar el resultado en orden ascendente. Cualquier pedido que vea en un resultado sin usarorder by
es 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. Unaunion
que aparece ordenada con 100 filas podría no estar con 100,000 filasORDER BY
clá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.
Union Vs Union All With Example
fuente
¡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
En ORACLE UNION ALL recupera todas las filas de ambas tablas. Lo mismo ocurrirá en MySQL.
Sin embargo:
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!
fuente
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
esto me da registros 2020
por otra parte
me da más de 17402 filas
en perspectiva de precedencia ambos tienen la misma precedencia.
fuente
Si no es así
ORDER BY
, aUNION ALL
puede recuperar las filas a medida que avanza, mientras que aUNION
lo 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: aUNION ALL
mantiene 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 ALL
puede ser bastante útil.fuente
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.
fuente
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í.
fuente
UNION ALL
También funciona en más tipos de datos. Por ejemplo, cuando se intenta unir tipos de datos espaciales. Por ejemplo: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 all
no lo hará.fuente
La única diferencia es:
"UNION" elimina filas duplicadas.
"UNION ALL" no elimina filas duplicadas.
fuente