Pregunta

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

¿Fue útil?

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

  1. Datos de la tabla de empleados:

enter image description here

  1. Datos de la tabla de clientes:

enter image description here

  1. Ejemplo UNION (Elimina todos los registros duplicados):

enter image description here

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

enter image description here

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. UNIONSon 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'

enter image description here

A continuación se presentan los resultados de las operaciones de UNION ALL y UNION.

enter image description here

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:

enter image description here

(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.

enter image description here

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))

enter image description here

Student- ID(int), Name(varchar(50)), Email(varchar(50)), PositionID(int)

enter image description here

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á

enter image description here

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

Producción enter image description here

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

Unión Vs Unión Todos Con Ejemplo

¡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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top