Qual é a diferença entre UNIÃO e de UNIÃO de TODOS?
Pergunta
Qual é a diferença entre UNION
e UNION ALL
?
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
- Empregado de mesa de dados:
- Cliente tabela de dados:
- UNIÃO Exemplo (Ele remove todos os registros duplicados):
- UNION ALL Exemplo (apenas concatenar registros, não eliminar duplicatas, portanto, é mais rápido do que a UNIÃO):
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 UNION
s 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'
A seguir são resultados da UNIÃO de TODOS e da UNIÃO operações.
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:
(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.
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))
Student- ID(int), Name(varchar(50)), Email(varchar(50)), PositionID(int)
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á
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
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
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.