sql - horizontalmente - ¿Cuál es la diferencia entre UNION y UNION ALL?
union vs union all oracle (22)
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 la unión de todas devuelve todas las filas después de la unión.
de http://zengin.wordpress.com/2007/07/31/union-vs-union-all/
¿Cuál es la diferencia entre UNION
y UNION ALL
?
No estoy seguro de que importa qué base de datos
UNION
y UNION ALL
deberían funcionar en todos los servidores SQL.
Debes evitar las UNION
innecesarias, ya que son enormes fugas de rendimiento. Como regla general, use UNION ALL
si no está seguro de cuál usar.
(De Microsoft SQL Server Book Online)
UNION [TODOS]
Especifica que los conjuntos de resultados múltiples deben combinarse y devolverse como un único conjunto de resultados.
TODOS
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 aplicará una fila duplicada para encontrar como DISTINCT
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
DISTINCT
sobre los resultados es una operación de clasificación de los resultados.
UNION ALL
resultados de UNION ALL
se mostrarán como un orden arbitrario sobre los resultados. Sin embargo, los resultados de UNION
se mostrarán como ORDER BY 1, 2, 3, ..., n (n = column number of Tables)
aplicados a los resultados. Puedes ver este efecto secundario cuando no tienes ninguna fila duplicada.
Añado un ejemplo,
UNION , se está fusionando con distinto -> más lento, porque necesita comparaciones (en el desarrollador de Oracle SQL, seleccione consulta, presione F10 para ver el análisis de costos).
UNION ALL , se fusiona sin distinciones -> 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;
En ORACLE: UNION no admite los tipos de columna BLOB (o CLOB), UNION ALL sí lo hace.
En palabras muy simples, la diferencia entre UNION y UNION ALL es que UNION omitirá los registros duplicados, mientras que UNION ALL incluirá los registros duplicados.
Es bueno entender con un diagrama de Venn.
Aquí está el link a la fuente. Hay una buena descripción.
Puede evitar los duplicados y seguir ejecutando mucho más rápido que UNION DISTINCT (que en realidad es lo mismo que UNION) ejecutando la consulta de esta manera:
SELECT * FROM mytable WHERE a=X UNION ALL SELECT * FROM mytable WHERE b=Y AND a!=X
Observe la parte AND a!=X
Esto es mucho más rápido que UNION.
Si no hay ORDER BY
, UNION ALL
puede devolver las filas a medida que avanza, mientras que UNION
le haría esperar hasta el final de la consulta antes de entregarle el conjunto de resultados completo de una vez. Esto puede hacer una diferencia en una situación de tiempo de espera: UNION ALL
mantiene la conexión con vida, 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.
Solo para agregar mis dos centavos a la discusión aquí: uno podría entender al operador de UNION
como una UNION
pura orientada a SET - por ejemplo, conjunto A = {2,4,6,8}, conjunto B = {1,2,3, 4}, A 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, ya que un elemento está o no está 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 el operador UNION ALL
.
Supongamos que tienes dos mesas de profesor y alumno
Ambos tienen 4 columnas con nombres diferentes 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 operación UNION
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 operación UNION ALL
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, el rendimiento de 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
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 DISTINTO 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 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 de clientes:
- 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):
UNION - resultados en registros distintos
mientras
UNION ALL - da como resultado todos los registros, incluidos los duplicados.
Ambos son operadores de bloqueo y, por lo tanto, yo personalmente prefiero usar UNIONES 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 tiene un bajo rendimiento en comparación con la Unión de todo, verifique 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''
Los siguientes son los resultados de las operaciones UNION ALL y UNION.
Una declaración UNION hace un SELECTO DISTINTO en el conjunto de resultados. Si sabe que todos los registros devueltos son únicos de su sindicato, use UNION ALL en su lugar, le dará resultados más rápidos.
El uso de UNION da como resultado operaciones de ordenación distinta en el plan de ejecución. La prueba para probar esta declaración se muestra a continuación:
UNION elimina los registros duplicados en otra parte UNION ALL no lo hace. Pero es necesario 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 la unión 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 los récords 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.
UNION y UNION ALL solían combinar dos o más resultados de consultas.
El comando UNION selecciona información distinta y relacionada de dos tablas que eliminará filas duplicadas.
Por otro lado, el comando UNION ALL selecciona todos los valores de ambas tablas, que muestra todas las filas.
Una cosa más que me gustaría agregar-
Unión : - El conjunto de resultados se ordena en orden ascendente.
Unión a todos : - El conjunto de resultados no está ordenado. La salida de dos consultas simplemente se anexa.
union se utiliza para seleccionar valores distintos de dos tablas, mientras que union se usa para seleccionar todos los valores, incluidos los duplicados de las tablas
UNION
elimina los duplicados, mientras que UNION ALL
no lo hace.
Para eliminar duplicados, el conjunto de resultados debe estar ordenado, y esto puede tener un impacto en el rendimiento de UNION, según el volumen de datos que se esté PGA_AGGREGATE_TARGET
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 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.
Habría comentado en la primera publicación para calificar el comentario "es mucho menos eficaz", pero no tengo suficiente reputación (puntos) para hacerlo.
UNION
elimina los registros duplicados (donde todas las columnas de los resultados son iguales), UNION ALL
no.
Hay un impacto en el rendimiento cuando se usa UNION
lugar 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 UNION SELECT ''foo'' AS bar
Resultado:
+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)
Ejemplo de UNION ALL:
SELECT ''foo'' AS bar UNION ALL SELECT ''foo'' AS bar
Resultado:
+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)
UNION
fusiona el contenido de dos tablas estructuralmente compatibles en una sola tabla combinada.
- Diferencia:
La diferencia entre UNION
y UNION ALL
es que UNION will
omitirá los registros duplicados, mientras que UNION ALL
incluirá los registros duplicados.
Union
conjunto de resultados de la Union
se ordena en orden ascendente, mientras que el conjunto de resultados UNION ALL
no se ordena
UNION
realiza un DISTINCT
en su conjunto de resultados para que elimine cualquier fila duplicada. Mientras que UNION ALL
no eliminará los duplicados y, por lo tanto, es más rápido que UNION
. *
Nota : el rendimiento de UNION ALL
normalmente será mejor que UNION
, ya que UNION
requiere que el servidor realice el trabajo adicional de eliminar cualquier duplicado. Por lo tanto, en los casos en que es seguro que no habrá duplicados, o que tener duplicados no es un problema, se recomendaría el uso de UNION ALL
por motivos de rendimiento.
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
UNIÓN
El comando UNION
se usa para seleccionar información relacionada de dos tablas, como el comando JOIN
. Sin embargo, cuando se usa el comando UNION
todas las columnas seleccionadas deben ser del mismo tipo de datos. Con UNION
, solo se seleccionan valores distintos.
UNION TODO
El comando UNION ALL
es igual al comando UNION
, excepto que UNION ALL
selecciona todos los valores.
La diferencia entre Union
y Union all
es que Union all
All no eliminará las filas duplicadas, en lugar de eso, simplemente extrae todas las filas de todas las tablas que se ajustan a sus específicos de consulta y las combina en una tabla.
Una declaración UNION
hace un SELECT DISTINCT
en el conjunto de resultados. Si sabe que todos los registros devueltos son únicos de su sindicato, use UNION ALL
lugar, le dará resultados más rápidos.