Respostas:
UNIONremove registros duplicados (onde todas as colunas nos resultados são iguais), UNION ALLnão.
Há um impacto no desempenho ao usar em UNIONvez de UNION ALL, pois o servidor de banco de dados deve executar um trabalho adicional para remover as linhas duplicadas, mas geralmente você não deseja as duplicatas (especialmente ao desenvolver relatórios).
SELECT 'foo' AS bar UNION SELECT 'foo' AS bar
Resultado:
+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)
SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar
Resultado:
+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)
UNION e UNION ALL concatenam o resultado de dois SQLs diferentes. Eles diferem na maneira como lidam com duplicatas.
UNION executa um DISTINCT no conjunto de resultados, eliminando quaisquer linhas duplicadas.
UNION ALL não remove duplicatas e, portanto, é mais rápido que UNION.
Nota: Ao usar este comando, todas as colunas selecionadas precisam ter o mesmo tipo de dados.
Exemplo: se tivermos duas tabelas, 1) Funcionário e 2) Cliente




UNIONremove duplicatas, enquanto UNION ALLque não.
Para remover duplicatas, o conjunto de resultados deve ser classificado, e isso pode afetar o desempenho do UNION, dependendo do volume de dados que está sendo classificado e das configurações de vários parâmetros do RDBMS (para Oracle PGA_AGGREGATE_TARGETcom WORKAREA_SIZE_POLICY=AUTOou SORT_AREA_SIZEe SOR_AREA_RETAINED_SIZEse WORKAREA_SIZE_POLICY=MANUAL).
Basicamente, a classificação é mais rápida se puder ser realizada na memória, mas a mesma ressalva sobre o volume de dados se aplica.
Obviamente, se você precisar de dados retornados sem duplicatas, deverá usar o UNION, dependendo da fonte dos seus dados.
Eu teria comentado no primeiro post para qualificar o comentário "é muito menos eficiente", mas não tenho reputação (pontos) suficiente para fazê-lo.
No ORACLE: UNION não suporta tipos de coluna BLOB (ou CLOB), UNION ALL.
A diferença básica entre UNION e UNION ALL é a operação de união, que elimina as linhas duplicadas do conjunto de resultados, mas a união todas retorna todas as linhas após a união.
de http://zengin.wordpress.com/2007/07/31/union-vs-union-all/
Você pode evitar duplicatas e ainda executar muito mais rápido que UNION DISTINCT (que é realmente o mesmo que UNION) executando uma consulta como esta:
SELECT * FROM mytable WHERE a=X UNION ALL SELECT * FROM mytable WHERE b=Y AND a!=X
Observe a AND a!=Xparte. Isso é muito mais rápido que o UNION.
UNION- UNIONtambém remove duplicatas retornadas pelas subconsultas, enquanto sua abordagem não retorna.
Apenas para adicionar meus dois centavos à discussão aqui: é possível entender o UNIONoperador como uma UNIÃO pura e orientada para o SET - por exemplo, conjunto A = {2,4,6,8}, conjunto B = {1,2,3,4 }, A UNIÃO B = {1,2,3,4,6,8}
Ao lidar com conjuntos, você não deseja que os números 2 e 4 apareçam duas vezes, pois um elemento está ou não em um conjunto.
No mundo do SQL, no entanto, você pode querer ver todos os elementos dos dois conjuntos juntos em um "saco" {2,4,6,8,1,2,3,4}. E para esse fim, o T-SQL oferece ao operador UNION ALL.
UNION ALLnão é "oferecido" pelo T-SQL. UNION ALLfaz parte do padrão ANSI SQL e não é específico para o MS SQL Server.
UNION
O UNIONcomando é usado para selecionar informações relacionadas de duas tabelas, bem como o JOINcomando. No entanto, ao usar o UNIONcomando, todas as colunas selecionadas precisam ter o mesmo tipo de dados. Com UNION, apenas valores distintos são selecionados.
UNION ALL
O UNION ALLcomando é igual ao UNIONcomando, exceto que UNION ALLseleciona todos os valores.
A diferença entre Unione Union allé que Union allnão eliminará linhas duplicadas, apenas puxa todas as linhas de todas as tabelas que se ajustam às especificidades de sua consulta e as combina em uma tabela.
Uma UNIONdeclaração efetivamente faz um SELECT DISTINCTno conjunto de resultados. Se você souber que todos os registros retornados são exclusivos do seu sindicato, use UNION ALL-o para obter resultados mais rápidos.
Não tenho certeza de que importa qual banco de dados
UNIONe UNION ALLdeve funcionar em todos os servidores SQL.
Você deve evitar desnecessários, UNIONpois eles são um grande vazamento de desempenho. Como regra geral, use UNION ALLse você não tiver certeza de qual usar.
UNION - resulta em registros distintos ,
enquanto
UNION ALL - resulta em todos os registros, incluindo duplicatas.
Ambos são operadores de bloqueio e, portanto, eu pessoalmente prefiro usar JOINS em vez de operadores de bloqueio (UNION, INTERSECT, UNION ALL etc.) a qualquer momento.
Para ilustrar por que a operação da União apresenta um desempenho ruim em comparação com o checkout da União Todos no 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 apresentados os resultados das operações UNION ALL e UNION.
Uma instrução UNION efetivamente faz um SELECT DISTINCT no conjunto de resultados. Se você souber que todos os registros retornados são exclusivos de sua união, use UNION ALL, pois isso gera resultados mais rápidos.
O uso de UNION resulta em operações de Classificação Distinta no Plano de Execução. A prova para provar esta afirmação é mostrada abaixo:
UNION/ UNION ALL).
unioncombinação de joins e alguns realmente sórdidos case, mas isso torna quase impossível a leitura e a manutenção da consulta e, na minha experiência, também é terrível para o desempenho. Compare: select foo.bar from foo union select fizz.buzz from fizzcontraselect case when foo.bar is null then fizz.buzz else foo.bar end from foo join fizz where foo.bar is null or fizz.buzz is null
union é usado para selecionar valores distintos de duas tabelas, onde, como union all, é usado para selecionar todos os valores, incluindo duplicatas das tabelas.
()mostrada uma segunda vez. Na verdade, pensando bem, porque o union allresultado não é um conjunto, você não deve tentar desenhá-lo usando um diagrama de Venn!
(Do Microsoft SQL Server Book Online)
UNIÃO [TODOS]
Especifica que vários conjuntos de resultados devem ser combinados e retornados como um único conjunto de resultados.
TODOS
Incorpora todas as linhas nos resultados. Isso inclui duplicatas. Se não especificado, as linhas duplicadas serão removidas.
UNIONlevará muito tempo se uma linha duplicada encontrar como DISTINCTfor aplicada nos 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
DISTINCTsobre os resultados é uma operação de classificação nos resultados.
UNION ALLos resultados serão mostrados como ordem arbitrária nos resultados, mas os UNIONresultados serão mostrados como ORDER BY 1, 2, 3, ..., n (n = column number of Tables)aplicados nos resultados. Você pode ver esse efeito colateral quando não possui nenhuma linha duplicada.
Eu adiciono um exemplo
UNION , ele está se mesclando com distinto -> mais lento, porque precisa ser comparado (no desenvolvedor do Oracle SQL, escolha a consulta, pressione F10 para ver a análise de custo).
UNION ALL , está se unindo sem distinção -> 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 tabelas estruturalmente compatíveis em uma única tabela combinada.
A diferença entre UNIONe UNION ALLé que UNION willomitem registros duplicados e que UNION ALLincluem registros duplicados.
UnionO conjunto de resultados é classificado em ordem crescente, enquanto o UNION ALLconjunto de resultados não é classificado
UNIONexecuta um DISTINCTem seu conjunto de resultados para eliminar quaisquer linhas duplicadas. Considerando UNION ALLque não removerá duplicatas e, portanto, é mais rápido que UNION. *
Nota : O desempenho de UNION ALLnormalmente será melhor do que UNION, uma vez que UNIONrequer que o servidor execute o trabalho adicional de remover duplicatas. Portanto, nos casos em que é certo que não haverá duplicatas ou onde a duplicação não é um problema, o uso de UNION ALLseria recomendado por razões de desempenho.
ORDER BY, os resultados classificados não são garantidos. Talvez você tenha um fornecedor SQL específico em mente (mesmo assim, em ordem crescente o que exatamente ...?), Mas esta pergunta não tem tags específicas de fornecedor =.
Suponha que você tenha duas tabelas Professor e Aluno
Ambos têm 4 colunas 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 UNION ou UNION ALL para as duas tabelas que possuem o mesmo número de colunas. Mas eles têm um nome ou tipo de dados diferente.
Quando você aplica a UNIONoperação em 2 tabelas, ela negligencia todas as entradas duplicadas (o valor de todas as colunas da linha em uma tabela é igual a outra tabela). Como isso
SELECT * FROM Student
UNION
SELECT * FROM Teacher
o resultado será
Quando você aplica a UNION ALLoperação em 2 tabelas, ele retorna todas as entradas duplicadas (se houver alguma diferença entre qualquer valor de coluna de uma linha em 2 tabelas). Como isso
SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher
Atuação:
Obviamente, o desempenho de UNION ALL é melhor que UNION, pois eles executam tarefas adicionais para remover os valores duplicados. Você pode verificar isso no tempo estimado de execução pressionando ctrl + L no MSSQL
UNIONpara transmitir intenções (ou seja, sem duplicatas), porque UNION ALLé improvável que se obtenha algum ganho de desempenho na vida real em termos absolutos.
Em palavras muito simples, a diferença entre UNION e UNION ALL é que UNION omitirá registros duplicados, enquanto UNION ALL incluirá registros duplicados.
Mais uma coisa que gostaria de acrescentar:
União : - O conjunto de resultados é classificado em ordem crescente.
União de todos : - O conjunto de resultados não está classificado. duas saídas de consulta são anexadas.
UNIONirá NÃO tipo o resultado em ordem crescente. Qualquer pedido que você vê em um resultado sem usar order byé pura coincidência. O DBMS é livre para usar qualquer estratégia que considere eficiente para remover as duplicatas. Esta pode ser a classificação, mas também poderia ser um algoritmo de hash ou algo completamente diferente - e a estratégia vai mudar com o número de linhas. Um unionque aparece classificado com 100 linhas pode não estar com 100.000 linhas
ORDER BYcláusula apropriada .
Diferença entre Union vs Union ALL em Sql
O que é o Union In SQL?
O operador UNION é usado para combinar o conjunto de resultados de dois ou mais conjuntos 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 Oracle e Mysql: Digamos que t1 t2 não possui linhas duplicadas entre elas, mas elas possuem linhas duplicadas individuais. Exemplo: t1 tem 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 UNION, TODAS busca todas as linhas das duas tabelas. O mesmo ocorrerá no MySQL.
Contudo:
SELECT T1.YEAR, T1.PRODUCT FROM T1
UNION
SELECT T2.YEAR, T2.PRODUCT FROM T2
No ORACLE , UNION busca todas as linhas de ambas as tabelas porque não há valores duplicados entre t1 e t2. Por outro lado, no MySQL, o conjunto de resultados terá menos linhas, porque haverá linhas duplicadas na tabela t1 e também na tabela t2!
UNION remove registros duplicados por outro lado, UNION ALL não. Mas é preciso verificar a maior parte dos dados que serão processados e a coluna e o tipo de dados devem ser os mesmos.
Como a união usa internamente um comportamento "distinto" para selecionar as linhas, é mais caro em termos de tempo e desempenho. gostar
select project_id from t_project
union
select project_id from t_project_contact
isso me dá 2020 registros
por outro lado
select project_id from t_project
union all
select project_id from t_project_contact
me dá mais de 17402 linhas
na perspectiva de precedência, ambos têm a mesma precedência.
Se não houver ORDER BY, a UNION ALLpoderá retornar as linhas conforme necessário, enquanto a UNIONfará com que você espere até o final da consulta antes de fornecer todo o conjunto de resultados de uma só vez. Isso pode fazer a diferença em uma situação de tempo limite - a UNION ALLmantém a conexão viva, por assim dizer.
Portanto, se você tiver um problema de tempo limite e não houver classificação e duplicatas não forem um problema, UNION ALL pode ser bastante útil.
UNION e UNION ALL costumavam combinar dois ou mais resultados da consulta.
O comando UNION seleciona informações distintas e relacionadas de duas tabelas que eliminam linhas duplicadas.
Por outro lado, o comando UNION ALL seleciona todos os valores das duas tabelas, que exibem todas as linhas.
Como hábito, use sempre UNION ALL . Use apenas UNION em casos especiais quando precisar eliminar duplicatas que podem ser extremamente complicadas e você pode ler tudo sobre os outros comentários aqui.
UNION ALLtambém funciona em mais tipos de dados. Por exemplo, ao tentar unir tipos de dados espaciais. Por exemplo:
select a.SHAPE from tableA a
union
select b.SHAPE from tableB b
vai jogar
The data type geometry cannot be used as an operand to the UNION, INTERSECT or EXCEPT operators because it is not comparable.
No entanto union allnão.
A única diferença é:
"UNION" remove linhas duplicadas.
"UNION ALL" não remove linhas duplicadas.