Pergunta

Qual é a diferença entre UNION e UNION ALL?

Foi útil?

Solução

UNION remove registros duplicados (onde todas as colunas no resultados são os mesmos), UNION ALL não.

Há uma queda de desempenho quando utilizar UNION em vez de UNION ALL, uma vez que o servidor de banco de dados deve fazer o trabalho adicional para remover as linhas duplicadas, mas normalmente você não quer que as duplicatas (especialmente no desenvolvimento de relatórios).

UNIÃO Exemplo:

SELECT 'foo' AS bar UNION SELECT 'foo' AS bar

Resultado:

+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)

UNION ALL exemplo:

SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar

Resultado:

+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)

Outras dicas

Tanto a UNIÃO e UNIÃO de TODOS os concatenar o resultado de dois tipos diferentes de SQLs.Eles diferem na forma como eles lidam com duplicatas.

  • UNIÃO executa uma DISTINTAS no conjunto de resultados, eliminando linhas duplicadas.

  • UNIÃO de TODOS não remover duplicatas, e, portanto, mais rápido do que a UNIÃO.

Nota: Durante a utilização desta comandos de todas as colunas selecionadas precisam ser do mesmo tipo de dados.

Exemplo:Se nós temos duas tabelas, 1) Empregado e 2) o Cliente

  1. Empregado de mesa de dados:

enter image description here

  1. Cliente tabela de dados:

enter image description here

  1. UNIÃO Exemplo (Ele remove todos os registros duplicados):

enter image description here

  1. UNION ALL Exemplo (apenas concatenar registros, não eliminar duplicatas, portanto, é mais rápido do que a UNIÃO):

enter image description here

UNION remove duplicatas, considerando que UNION ALL não.

A fim de remover duplicatas o conjunto de resultados deve ser classificado, e esta pode ter um impacto sobre o desempenho da UNIÃO, dependendo do volume de dados a serem ordenados, e os ajustes de vários RDBMS parâmetros ( Para Oracle PGA_AGGREGATE_TARGET com WORKAREA_SIZE_POLICY=AUTO ou SORT_AREA_SIZE e SOR_AREA_RETAINED_SIZE se WORKAREA_SIZE_POLICY=MANUAL ).

Basicamente, o tipo é mais rápido se ela pode ser realizada em memória, mas o mesmo argumento sobre o volume de dados aplica-se.

Claro, se você precisa que os dados retornados sem duplicatas, em seguida, você deve utilize UNIÃO, dependendo da fonte de dados.

Eu gostaria de ter comentado no primeiro post para qualificar o "é muito menos performance" comentário, mas insuficiente reputação (pontos) para fazer isso.

No ORACLE:UNIÃO não oferece suporte BLOB (ou CLOB) tipos de coluna, UNIÃO de TODOS faz.

A diferença básica entre a UNIÃO e UNIÃO de TODOS é a união de operação elimina o duplicado linhas do conjunto de resultados, mas a união de todos os devolve todas as linhas depois de entrar.

a partir de http://zengin.wordpress.com/2007/07/31/union-vs-union-all/

Você pode evitar duplicatas e ainda correr muito mais rápido do que a UNIÃO DISTINTOS (que, na verdade, é mesmo como UNIÃO) executando uma consulta como esta:

SELECT * FROM mytable WHERE a=X UNION ALL SELECT * FROM mytable WHERE b=Y AND a!=X

Observe o AND a!=X a parte.Isso é muito mais rápido, em seguida, UNIÃO.

Para adicionar apenas meus dois centavos para a discussão aqui:alguém poderia entender o UNION operador como um puro, orientado no CONJUNTO da UNIÃO - e.conjunto A={2,4,6,8}, o conjunto B={1,2,3,4}, UMA UNIÃO B = {1,2,3,4,6,8}

Ao lidar com conjuntos, você não gostaria de números 2 e 4 de aparecer duas vezes, como um elemento é ou não é em um conjunto.

No mundo do SQL, no entanto, você pode querer ver todos os elementos dos dois conjuntos de juntas em um "saco" {2,4,6,8,1,2,3,4}.E, para este propósito T-SQL oferece o operador UNION ALL.

UNIÃO
O UNION o comando é usado para selecionar as informações relacionadas a partir de duas tabelas, bem como o JOIN de comando.No entanto, quando utilizar o UNION comando de todas as colunas selecionadas precisam ser do mesmo tipo de dados.Com UNION, apenas valores distintos são selecionados.

UNIÃO DE TODOS OS
O UNION ALL o comando é igual ao UNION de comando, exceto que UNION ALL seleciona todos os valores.

A diferença entre Union e Union all é que Union all não vai eliminar linhas duplicadas, em vez disso, ele só puxa todas as linhas de todas as tabelas de ajuste de consulta especificidades e combina-los em uma tabela.

Um UNION instrução efetivamente não um SELECT DISTINCT no conjunto de resultados.Se você sabe que todos os registros retornados são exclusivos de sua união, UNION ALL em vez disso, ele dá resultados mais rápidos.

Não tenho certeza o que importa de qual banco de dados

UNION e UNION ALL deve funcionar em todos os Servidores SQL.

Você deve evitar o desnecessário UNIONs eles são enormes desempenho de vazamento.Como uma regra de uso UNION ALL se você não tiver certeza de qual usar.

união é usado para selecionar valores distintos, a partir de duas tabelas onde, como union all é usado para selecionar todos os valores, incluindo duplicatas a partir das tabelas

UNIÃO - resultados distintos registros

enquanto

UNIÃO de TODOS - os resultados em todos os registros, incluindo duplicatas.

Ambos estão bloqueando os operadores e, portanto, eu, pessoalmente, prefiro usar JUNÇÕES sobre o Bloqueio de Operadores(UNIÃO, INTERSEÇÃO, UNIÃO, etc.) a qualquer momento.

Para ilustrar o porquê de operação de União executa mal em comparação com a União de Todos os checkout exemplo a seguir.

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 seguir são resultados da UNIÃO de TODOS e da UNIÃO operações.

enter image description here

Uma instrução UNION efetivamente faz um SELECT DISTINCT no conjunto de resultados.Se você sabe que todos os registros retornados são exclusivos de sua união, UNIÃO de TODOS em vez disso, ele dá resultados mais rápidos.

Utilizando UNIÃO resulta em Distintos De Classificação operações no Plano de Execução.Prova para provar esta afirmação é mostrado abaixo:

enter image description here

(A partir do Microsoft SQL Server Livro On-line)

UNION [ALL]

Especifica que vários conjuntos de resultados devem ser combinados e voltou como um único conjunto de resultados.

TODOS

Incorpora todas as linhas nos resultados.Isso inclui duplicatas.Se não for especificada, as linhas duplicadas serão removidas.

UNION vai levar muito tempo, como linhas duplicadas encontrar como DISTINCT é aplicada sobre os resultados.

SELECT * FROM Table1
UNION
SELECT * FROM Table2

é equivalente a:

SELECT DISTINCT * FROM (
    SELECT * FROM Table1
    UNION ALL
    SELECT * FROM Table2) DT

Um efeito colateral da aplicação DISTINCT mais resultados é um operação de classificação nos resultados.

UNION ALL os resultados serão mostrados como arbitrária ordem em resultados Mas UNION os resultados serão mostrados como ORDER BY 1, 2, 3, ..., n (n = column number of Tables) aplicado em resultados.Você pode ver este efeito colateral, quando você não tem nenhuma linha duplicada.

É bom entender com um Venn diagramm.

aqui é o link para a fonte.Não é uma boa descrição.

enter image description here

Eu add um exemplo,

UNIÃO, ele está mesclando com distintas --> mais lento, porque ele precisa comparar (Em Oracle SQL developer, escolha de consulta, prima F10 para ver análise de custo).

UNIÃO DE TODOS OS, ele está mesclando sem distintos --> mais rápido.

SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;

e

SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION ALL
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;

UNION mescla o conteúdo de duas estruturalmente compatível com tabelas em um único combinado tabela.

  • Diferença:

A diferença entre UNION e UNION ALL é que UNION will omitir registros duplicados considerando que UNION ALL incluirá registros duplicados.

Union Conjunto de resultados é classificada em ordem crescente, enquanto UNION ALL Resultado conjunto não ordenado

UNION executa um DISTINCT no seu conjunto de resultados, assim ele vai eliminar as linhas duplicadas.Considerando que a UNION ALL não remover duplicatas e, portanto, é mais rápido do que UNION.*

Nota: O desempenho de UNION ALL normalmente será melhor do que UNION, já que UNION requer que o servidor para fazer o trabalho adicional de remover as duplicatas.Assim, em casos onde é certo de que não haverá qualquer duplicatas, ou onde a posse de duplicatas não é um problema, o uso de UNION ALL seria recomendado por motivos de desempenho.

Suponha que você tem duas tabela Professor & Estudante

Ambos têm 4 Coluna com Nome diferente como este

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

Você pode aplicar UNIÃO ou UNIÃO de TODOS para que aqueles dois de mesa que têm o mesmo número de colunas.Mas eles têm outro nome ou tipo de dados.

Quando você aplicar UNION operação em 2 de tabelas, ele negligencia todas as entradas duplicadas(todas as colunas valor da linha em uma tabela é o mesmo de outra tabela).Como este

SELECT * FROM Student
UNION
SELECT * FROM Teacher

o resultado será

enter image description here

Quando você aplicar UNION ALL operação em 2 de tabelas, ele retorna todas as entradas duplicadas(se é que há alguma diferença entre qualquer valor de coluna de uma linha em 2 tabelas).Como este

SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher

Saída enter image description here

Desempenho:

Obviamente UNIÃO DE TODOS OS o desempenho é melhor que UNIÃO como eles fazem tarefa adicional para remover valores duplicados.Você pode verificar que, a partir de Tempo Estimado De Execução por imprensa ctrl+L no MSSQL

Mais uma coisa que eu gostaria de adicioná-

União:- Conjunto de resultados é classificada em ordem crescente.

União De Todos Os:- Conjunto de resultados não é ordenada.dois Consulta de saída só fica acrescentado.

Em palavras muito simples a diferença entre UNIÃO e de UNIÃO de TODOS é que a UNIÃO irá omitir registros duplicados considerando que a UNIÃO de TODOS vai incluir registros duplicados.

Diferença Entre União Vs Union ALL No Sql

O que É União No SQL?

O operador UNION é usado para combinar o resultado-conjunto de duas ou mais conjunto de dados .

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ão Vs União De Todos Com O Exemplo

Importante!Diferença entre o Oracle e Mysql:Vamos dizer que t1 t2 não tem linhas duplicadas entre eles, mas eles têm linhas duplicadas individuais.Exemplo:t1 tem de vendas a partir de 2017 e t2 a partir de 2018

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION ALL

SELECT T2.YEAR, T2.PRODUCT FROM T2

No ORACLE UNIÃO de TODOS os obtém todas as linhas de ambas as tabelas.O mesmo vai ocorrer no MySQL.

No entanto:

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION

SELECT T2.YEAR, T2.PRODUCT FROM T2

No ORACLE, UNIÃO obtém todas as linhas de ambas as tabelas, porque não há valores duplicados entre t1 e t2.Por outro lado, na MySQL o conjunto de resultados terá menos linhas, porque haverá linhas duplicadas dentro da tabela t1, e também na tabela t2!

UNIÃO remove registros duplicados em outro lado UNIÃO de TODOS não.Mas é preciso verificar a massa de dados que vai ser processado e a coluna e o tipo de dados deve ser a mesma.

desde que a união usa internamente "diferente" de comportamento para selecionar as linhas, portanto, é mais dispendioso em termos de tempo e de desempenho.como

select project_id from t_project
union
select project_id from t_project_contact  

isso me dá 2020 registros

no outro lado

select project_id from t_project
union all
select project_id from t_project_contact

dá-me mais do que 17402 linhas

no precedência perspectiva de ambos tem a mesma precedência.

Se não há ORDER BY, um UNION ALL pode trazer linhas de volta, como ele vai, considerando que um UNION gostaria de fazer você esperar até o final da consulta, antes de dar-lhe o conjunto de resultados inteiro de uma só vez.Isso pode fazer a diferença em um time-out da situação - um UNION ALL mantém a conexão vivo, por assim dizer.

Então, se você tem um problema de tempo limite, e não há nenhuma classificação, e duplicatas não são um problema, UNION ALL pode ser bastante útil.

UNIÃO e UNIÃO de TODOS, usado para combinar dois ou mais resultados da consulta.

UNIÃO de comando seleciona distintas e relacionadas com informações de duas tabelas que vai eliminar linhas duplicadas.

Por outro lado, a UNIÃO de TODOS os comando seleciona todos os valores de ambas as tabelas, que exibe todas as linhas.

A única diferença é :

"UNIÃO" remove linhas duplicadas.

"UNIÃO de TODOS" não remove linhas duplicadas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top