¿Cuál es la diferencia entre UNION y UNION ALL?
Pregunta
Cuál es la diferencia entre UNION
y UNION ALL
?
Solución
UNION
elimina registros duplicados (donde todas las columnas de los resultados son iguales), UNION ALL
no es.
Hay un impacto en el rendimiento al usar 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 normalmente 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)
UNIÓN TODO ejemplo:
SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar
Resultado:
+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)
Otros consejos
Tanto UNION como UNION ALL concatenan el resultado de dos SQL diferentes.Se diferencian en la forma en que manejan los duplicados.
UNION realiza un DISTINCT en el conjunto de resultados, eliminando cualquier fila duplicada.
UNION ALL no elimina duplicados y, por lo tanto, es más rápido que UNION.
Nota: Al utilizar 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 de clientes:
- Ejemplo UNION (Elimina todos los registros duplicados):
- UNION ALL Ejemplo (Solo concatena registros, no elimina duplicados, por lo que es más rápido que UNION):
UNION
elimina duplicados, mientras que UNION ALL
no es.
Para eliminar duplicados, el conjunto de resultados debe estar ordenado, y esto puede tienen un impacto en el rendimiento de UNION, según el volumen de datos que se ordenan y la configuración de varios parámetros 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, la clasificación es más rápida si se puede realizar en la memoria, pero se aplica la misma advertencia sobre el volumen de datos.
Por supuesto, si necesita que se le devuelvan datos sin duplicados, entonces debe utilice UNION, dependiendo de la fuente de sus datos.
Habría comentado en la primera publicación para calificar el comentario "tiene mucho menos rendimiento", pero no tengo suficiente reputación (puntos) para hacerlo.
En ORACLE:UNION no admite tipos de columnas 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 unión todo 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 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 UNION.
Solo para agregar mi granito de arena a la discusión aquí:uno podría entender el UNION
operador como una UNION pura orientada a SET, p.conjunto A={2,4,6,8}, conjunto B={1,2,3,4}, A UNIÓN B = {1,2,3,4,6,8}
Cuando se trata de conjuntos, no querrás que los números 2 y 4 aparezcan dos veces, tampoco como elemento. es o no es en un conjunto.
Sin embargo, en el mundo de SQL, es posible que desees ver todos los elementos de los dos conjuntos juntos en una "bolsa" {2,4,6,8,1,2,3,4}.Y para ello T-SQL ofrece al operador UNION ALL
.
UNIÓN
El UNION
El comando se utiliza para seleccionar información relacionada de dos tablas, muy parecido al JOIN
dominio.Sin embargo, al utilizar el UNION
comando todas las columnas seleccionadas deben ser del mismo tipo de datos.Con UNION
, sólo se seleccionan valores distintos.
UNIÓN TODOS
El UNION ALL
comando es igual a UNION
comando, excepto que UNION ALL
selecciona todos los valores.
La diferencia entre Union
y Union all
es eso Union all
no eliminará las filas duplicadas, sino que simplemente extrae todas las filas de todas las tablas que se ajustan a los detalles de su consulta y las combina en una tabla.
A UNION
declaración efectivamente hace un SELECT DISTINCT
en el conjunto de resultados.Si sabe que todos los registros devueltos son únicos de su sindicato, utilice UNION ALL
en cambio, da 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.
Debes evitar cosas innecesarias. UNION
Son una gran pérdida de rendimiento.Como regla general, utilice UNION ALL
si no está seguro de cuál utilizar.
Union se usa para seleccionar valores distintos de dos tablas donde, como unión, todo se usa para seleccionar todos los valores, incluidos los duplicados de las tablas.
UNIÓN - resultados en distinto registros
mientras
UNION ALL: da como resultado 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 Union funciona mal en comparación con Union All, consulte 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 de UNION ALL y UNION.
Una declaración UNION efectivamente realiza un SELECT DISTINCT en el conjunto de resultados.Si sabe que todos los registros devueltos son únicos de su unión, utilice UNION ALL en su lugar, le dará resultados más rápidos.
El uso de UNION da como resultado Ordenación distinta operaciones en el Plan de Ejecución.La prueba que prueba esta afirmación se muestra a continuación:
(De Microsoft SQL Server Libro en línea)
UNIÓN [TODOS]
Especifica que se combinarán varios conjuntos de resultados y se devolverán como un único conjunto de resultados.
TODO
Incorpora todas las filas en los resultados.Esto incluye duplicados.Si no se especifica, se eliminan las filas duplicadas.
UNION
Tomará demasiado tiempo ya que se encuentran filas duplicadas como DISTINCT
se aplica sobre 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 la aplicación.
DISTINCT
los resultados excesivos son un operación de clasificación sobre los resultados.
UNION ALL
los resultados se mostrarán como arbitrario orden en los resultados pero UNION
los resultados se mostrarán como ORDER BY 1, 2, 3, ..., n (n = column number of Tables)
aplicado sobre los resultados.Puede ver este efecto secundario cuando no tiene ninguna fila duplicada.
Es bueno entenderlo con un diagrama de Venn.
aquí está el enlace a la fuente.Hay una buena descripción.
Agrego un ejemplo,
UNIÓN, se está fusionando con distintos --> más lento, porque necesita compararse (en el desarrollador de Oracle SQL, elija consulta, presione F10 para ver el análisis de costos).
UNIÓN TODOS, 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
fusiona el contenido de dos tablas estructuralmente compatibles en una sola tabla combinada.
- Diferencia:
La diferencia entre UNION
y UNION ALL
es eso UNION will
omitir registros duplicados mientras que UNION ALL
incluirá registros duplicados.
Union
El conjunto de resultados se ordena en orden ascendente, mientras que UNION ALL
El conjunto de resultados no está ordenado
UNION
realiza un DISTINCT
en su conjunto de resultados para eliminar cualquier fila duplicada.Mientras UNION ALL
no eliminará duplicados y por lo tanto es más rápido que UNION
.*
Nota: El rendimiento de UNION ALL
normalmente será mejor que UNION
, desde UNION
requiere que el servidor haga el trabajo adicional de eliminar cualquier duplicado.Por lo tanto, en los casos en los que sea seguro que no habrá duplicados, o en los que tener duplicados no sea un problema, se puede utilizar UNION ALL
Se recomendaría por razones de rendimiento.
Supongamos que tienes dos mesas. Maestro & Alumno
Ambos tienen 4 columnas con nombre diferente como esto
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 aquellas dos tablas que tienen el mismo número de columnas.Pero tienen diferentes nombres o tipos de datos.
Cuando aplicas UNION
operación en 2 tablas, ignora todas las entradas duplicadas (el valor de todas las columnas de la fila de una tabla es el mismo que el de otra tabla).Como esto
SELECT * FROM Student
UNION
SELECT * FROM Teacher
el resultado será
Cuando aplicas UNION ALL
operación en 2 tablas, devuelve todas las entradas duplicadas (si hay alguna diferencia entre el valor de cualquier columna de una fila en 2 tablas).Como esto
SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher
Actuación:
Obviamente UNIÓN TODOS el rendimiento es mejor que UNIÓN ya que realizan tareas adicionales para eliminar los valores duplicados.Puedes comprobarlo desde Tiempo estimado de ejecución por prensa control+L en MSSQL
Una cosa más que me gustaría agregar.
Unión:- El conjunto de resultados está ordenado en orden ascendente.
Unión Todos:- El conjunto de resultados no está ordenado.dos El resultado de la consulta simplemente se agrega.
En palabras muy simples, la diferencia entre UNION y UNION ALL es que UNION omitirá registros duplicados mientras que UNION ALL incluirá registros duplicados.
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 sí 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 ORÁCULO, UNION recupera todas las filas de ambas tablas porque no hay valores duplicados entre t1 y t2.Por otra parte 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, por otro lado, UNION ALL no lo hace.Pero es necesario verificar la mayor parte de los datos que se van a procesar y la columna y el tipo de datos deben ser los mismos.
dado que union utiliza internamente un comportamiento "distinto" para seleccionar las filas, es más costoso en términos de tiempo y rendimiento.como
select project_id from t_project
union
select project_id from t_project_contact
esto me da registros de 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 la perspectiva de precedencia, ambos tienen la misma precedencia.
Si no hay ORDER BY
, a UNION ALL
puede traer filas hacia atrás a medida que avanza, mientras que un UNION
Le haría esperar hasta el final de la consulta antes de brindarle el conjunto de resultados completo de una vez.Esto puede marcar la diferencia en una situación de tiempo muerto: UNION ALL
mantiene viva la conexión, por así decirlo.
Entonces, si tiene un problema de tiempo de espera, no hay clasificación y los duplicados no son un problema, UNION ALL
puede resultar bastante útil.
UNION y UNION ALL se utilizan para combinar dos o más resultados de consultas.
El comando UNION selecciona información distinta y relacionada de dos tablas, lo que eliminará filas duplicadas.
Por otro lado, el comando UNION ALL selecciona todos los valores de ambas tablas, lo que muestra todas las filas.
La única diferencia es:
"UNION" elimina filas duplicadas.
"UNION ALL" no elimina filas duplicadas.