Qual é a diferença entre União e união?
UNION
e UNION ALL
?
22 answers
UNION
remove registos duplicados (onde todas as colunas dos resultados são as mesmas), UNION ALL
não.
Existe um acerto de desempenho ao usar UNION
em vez de UNION ALL
, uma vez que o servidor de bases de dados deve fazer um trabalho adicional para remover as linhas duplicadas, mas normalmente você não quer os duplicados (especialmente ao desenvolver relatórios).
Exemplo da União:
SELECT 'foo' AS bar UNION SELECT 'foo' AS bar
Resultado:
+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)
TODOS exemplo:
SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar
Resultado:
+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)
A União executa um distinto no conjunto de resultados, eliminando quaisquer linhas duplicadas.
A União não elimina todos os duplicados, pelo que é mais rápida do que a União.
Exemplo: se tivermos dois quadros, 1) empregado e 2) ClienteNota: ao usar estes comandos, todas as colunas seleccionadas têm de ser do mesmo tipo de dados.
- Dados da tabela dos empregados:
- Dados da tabela de clientes:
- exemplo da União (remove todos os registos duplicados):
- todos os exemplos da União (apenas concatenar registos, não eliminar duplicados, por isso é mais rápido do que a União):
UNION
remove duplicados, enquanto 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
).
Claro, se precisar de dados devolvidos sem duplicados, então deve usar a União, dependendo da fonte dos seus dados.
Eu teria comentado sobre o primeiro post para qualificar o comentário" é muito menos performante", mas ter reputação insuficiente (pontos) para fazê-lo.
No oráculo: A União não suporta os tipos de colunas BLOB (ou CLOB), A União toda suporta.
A diferença básica entre a operação União e união tudo é a União elimina as linhas duplicadas do conjunto de resultados, mas a União todos retorna todas as linhas após a União.
De http://zengin.wordpress.com/2007/07/31/union-vs-union-all/
Você pode evitar duplicados e ainda executar muito mais rápido do que União distinta (que é realmente o mesmo que União), executando pesquisa como esta:
SELECT * FROM mytable WHERE a=X UNION ALL SELECT * FROM mytable WHERE b=Y AND a!=X
Repara na parte AND a!=X
. Isto é muito mais rápido do que a União.
Só para adicionar os meus dois cêntimos à discussão aqui: podia-se entender o operador {[[0]} como uma união pura e orientada - por exemplo, set a={2,4,6,8}, set B={1,2,3,4}, A União B = {1,2,3,4,6,8}
Ao lidar com conjuntos, você não iria querer números 2 e 4 aparecendo duas vezes, como um elemento ou é 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 este propósito T-SQL oferece ao operador UNION ALL
.
Europeia
O comando UNION
é usado para seleccionar a informação relacionada de duas tabelas, tal como o comando JOIN
. No entanto, ao usar o comando UNION
Todas as colunas seleccionadas têm de ser do mesmo tipo de dados. Com UNION
, apenas são seleccionados valores distintos.
EUROPEIA
O comando UNION ALL
é igual ao comando UNION
, excepto que UNION ALL
selecciona todos os valores.
A diferença entre Union
e Union all
é que Union all
não eliminará duplicate rows, instead it just pulls all rows from all tables fitting your query specifics and combines them into a table.
A declaração UNION
faz efectivamente um SELECT DISTINCT
sobre o conjunto de resultados. Se você sabe que todos os registros devolvidos são únicos de sua união, use UNION ALL
em vez disso, ele dá resultados mais rápidos.
Não sei se é importante qual a base de dados
UNION
e UNION ALL
deve funcionar em todos os servidores SQL.
UNION ALL
Se não tiver a certeza de qual usar.
UNION-results in distinct records
enquanto
Todos os resultados da União em todos os registos, incluindo duplicados.
Ambos são operadores de bloqueio e, portanto, eu pessoalmente prefiro usar junções em vez de operadores de bloqueio(União, INTERSECT, União tudo, etc. ) sempre.
([2]) para ilustrar o mau desempenho da operação da União em comparação com a União, ver o exemplo seguinte.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'
Seguem-se os resultados de União e operações sindicais.
Uma declaração da União efetivamente faz uma seleção distinta sobre o conjunto de resultados. Se você sabe que todos os registros devolvidos são únicos de sua união, use União em vez disso, ele dá resultados mais rápidos.
Usando os resultados da União emtipo distinto operações no plano de execução. A prova para provar esta declaração é mostrada abaixo:
A União é utilizada para seleccionar valores distintos de duas tabelas onde como União tudo é usado para selecionar todos os valores, incluindo duplicados das tabelas
(do Microsoft SQL Server Book Online)
EUROPEIA [TODOS]
Especifica que os conjuntos de resultados múltiplos devem ser combinados e devolvidos como um único conjunto de resultados.
TODOS
Incorpora todas as linhas nos resultados. Isto inclui duplicados. Se não for especificado, as linhas duplicadas são removidas.
UNION
irá demorar muito tempo até que uma linha duplicada como o DISTINCT
seja aplicada na resultado.
SELECT * FROM Table1
UNION
SELECT * FROM Table2
É equivalente a:
SELECT DISTINCT * FROM (
SELECT * FROM Table1
UNION ALL
SELECT * FROM Table2) DT
Um efeito secundário da aplicação de
DISTINCT
sobre os resultados é uma operação de ordenação sobre os resultados.
UNION ALL
os resultados serão apresentados como arbitrário ordem nos resultados, mas UNION
os resultados serão apresentados como ORDER BY 1, 2, 3, ..., n (n = column number of Tables)
aplicado nos resultados. Você pode ver este efeito colateral quando você não tem nenhuma linha duplicada.
Adiciono um exemplo,
UNION , está a fundir-se com o distinct --> mais lento, porque precisa de comparação (no programador SQL Oracle, escolha a consulta, carregue em F10 para ver a análise de custos).
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 : - O conjunto de Resultados está ordenado por ordem ascendente.
Union ALL: - O conjunto de resultados não está ordenado. duas consultas são adicionadas.
UNION
funde o conteúdo de duas tabelas estruturalmente compatíveis em uma única tabela combinada.
- diferença:
a diferença entre UNION
e UNION ALL
é que UNION will
omite registos duplicados enquanto UNION ALL
incluirá registos duplicados.
Union
O conjunto de Resultados É ordenado por ordem ascendente enquanto que UNION ALL
o conjunto de resultados não é ordenado
UNION
executa um DISTINCT
no seu conjunto de Resultados para que ele eliminar quaisquer linhas duplicadas. Considerando que UNION ALL
não irá remover duplicados e, portanto, é mais rápido do que UNION
.*
Nota: O desempenho do UNION ALL
normalmente será melhor do que UNION
, uma vez que UNION
requer que o servidor faça o trabalho adicional de remover as duplicatas. Assim, nos casos em que é certo que não haverá duplicados, ou em que ter duplicados não é um problema, o uso de UNION ALL
seria recomendado por razões de desempenho.
Ambos têm 4 colunas com nomes 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)
Você pode aplicar União ou união todos para aqueles dois quadros que têm o mesmo número de colunas. Mas eles têm nomes ou tipos de dados diferentes.
Quando aplica a operação UNION
em 2 tabelas, negligencia todos os itens duplicados(todos os valores das colunas da linha em uma tabela é o mesmo de outra tabela). Assim.
SELECT * FROM Student
UNION
SELECT * FROM Teacher
O resultado será
Quando aplica a operação UNION ALL
em 2 tabelas, devolve todos os itens com duplicado (se existir alguma diferença entre qualquer valor de coluna de uma linha em 2 tabelas). Assim.
SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher
Desempenho:
Obviamente A União tudo o desempenho é melhor que A União como eles fazem tarefa adicional para remover os valores duplicados. Você pode verificar que a partir de execução tempo estimado pressionando ctrl+L at MSSQL
Em palavras muito simples, a diferença entre a União e a união é que a União omitirá registos duplicados, enquanto a União incluirá todos registos duplicados.
A União remove os registos duplicados em contrapartida, nem todos os registos são iguais. Mas é preciso verificar a maior parte dos dados que vão ser processados e a coluna e o tipo de dados devem ser os mesmos.
Uma vez que a União internamente usa um comportamento "distinto" para selecionar as linhas, por isso é mais caro em termos de tempo e desempenho. Tipo
select project_id from t_project
union
select project_id from t_project_contact
Isto dá-me os registos de 2020
Por outro lado
select project_id from t_project
union all
select project_id from t_project_contact
Dá-me mais de 17402 linhas
Numa perspectiva de precedência, ambos têm a mesma precedência.Se não existe {[[0]}, um UNION ALL
pode trazer linhas de volta à medida que vai, enquanto que um UNION
faria você esperar até o fim da consulta antes de lhe dar todo o resultado definido de uma vez. Isso pode fazer a diferença em uma situação de tempo - a UNION ALL
Mantém a conexão viva, por assim dizer.
UNION ALL
pode ser bastante útil.
O comando da União selecciona informação distinta e relacionada de duas tabelas que irão eliminar linhas duplicadas.
Por outro lado, o comando UNION ALL selecciona todos os valores de ambas as tabelas, que mostram todas as linhas.
Diferença entre União contra União tudo em Sql
O que é a União em SQL?O operador da União é utilizado 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