Qual é a diferença entre JOIN e UNION?


Respostas:


301

UNIONcoloca linhas de consultas uma após a outra, enquanto cria JOINum produto cartesiano e o subconta - operações completamente diferentes. Exemplo trivial de UNION:

mysql> SELECT 23 AS bah
    -> UNION
    -> SELECT 45 AS bah;
+-----+
| bah |
+-----+
|  23 | 
|  45 | 
+-----+
2 rows in set (0.00 sec)

exemplo trivial semelhante de JOIN:

mysql> SELECT * FROM 
    -> (SELECT 23 AS bah) AS foo 
    -> JOIN 
    -> (SELECT 45 AS bah) AS bar
    -> ON (33=33);
+-----+-----+
| foo | bar |
+-----+-----+
|  23 |  45 | 
+-----+-----+
1 row in set (0.01 sec)

6
Você pode me dizer o que é um UNION-JOINe como posso realizá-lo no SQL padrão? Maria DB tem um comando union join, mas outros bancos de dados não. Obrigado.
Erran Morad

73

Uniões e uniões podem ser usadas para combinar dados de uma ou mais tabelas. A diferença está na forma como os dados são combinados.

Em termos simples, as junções combinam dados em novas colunas . Se duas tabelas forem unidas, os dados da primeira tabela serão mostrados em um conjunto de colunas ao lado da coluna da segunda tabela na mesma linha.

Os sindicatos combinam dados em novas linhas. Se duas tabelas forem "unidas" juntas, os dados da primeira tabela estarão em um conjunto de linhas e os dados da segunda tabela em outro conjunto. As linhas estão no mesmo resultado.

Aqui está uma representação visual de uma junção. As colunas da tabela A e B são combinadas em um único resultado.

insira a descrição da imagem aqui

Cada linha no resultado contém colunas das AMBAS tabelas A e B. As linhas são criadas quando as colunas de uma tabela correspondem às colunas de outra. Essa correspondência é chamada de condição de junção.

Isso torna as junções realmente ótimas para procurar valores e incluí-los nos resultados. Geralmente, isso é resultado da desnormalização (reversão da normalização) e envolve o uso da chave estrangeira em uma tabela para procurar valores de coluna usando a chave primária em outra.

Agora compare a representação acima com a de uma união. Em uma união, cada linha do resultado é de uma tabela OU da outra. Em uma união, as colunas não são combinadas para criar resultados, as linhas são combinadas.

insira a descrição da imagem aqui

Uniões e uniões podem ser usadas para combinar dados de uma ou mais tabelas em um único resultado. Ambos fazem isso de maneiras diferentes. Enquanto uma junção é usada para combinar colunas de diferentes tabelas, a união é usada para combinar linhas.

Fonte


4
Este é um exemplo visual incrível. Eu tinha certeza que entendi depois das outras respostas, mas isso esclareceu completamente.
seadoggie01

Para o exemplo de junção, tecnicamente falando, não deveria haver 10 colunas para o resultado?
Bharath Ram

60

UNION combina os resultados de duas ou mais consultas em um único conjunto de resultados que inclui todas as linhas que pertencem a todas as consultas na união.

Usando JOINs , você pode recuperar dados de duas ou mais tabelas com base em relacionamentos lógicos entre as tabelas. Associações indicam como o SQL deve usar dados de uma tabela para selecionar as linhas em outra tabela.

A operação UNION é diferente de usar JOINs que combinam colunas de duas tabelas.

Exemplo UNION:

SELECT 1 AS [Column1], 2 AS [Column2]
UNION
SELECT 3 AS [Column1], 4 AS [Column2]

Resultado:

Column1    Column2
-------------------
1          2
3          4

Exemplo de JOIN:

SELECT a.Column1, b.Column2 FROM TableA a INNER JOIN TableB b ON a.Id = b.AFKId

Isso produzirá todas as linhas de ambas as tabelas para as quais a condição a.Id = b.AFKIdé verdadeira.


A junção pode recuperar dados de uma * ou mais tabelas. Não necessariamente dois
Kennet Celeste

51

Você pode ver as mesmas explicações esquemáticas para ambas, mas são totalmente confusas.

Pela UNIÃO:

Digite a descrição da imagem aqui

Para JOIN:

Digite a descrição da imagem aqui


9
Estas imagens implica que FULL OUTER JOINé o mesmo que UNION, que têm diferenças
icc97

1
Essa resposta indica que essas imagens são confusas (qual IMO são), mas depois não explica o porquê nem oferece esclarecimentos sobre a pergunta original.
22417 Josh D.

1
Cada imagem com diagramas explica perfeitamente a situação. Não existe uma imagem única que possa mesclar todos os diagramas. Isso será mais confuso.
Java Main

41

JUNTE-SE:

Uma junção é usada para exibir colunas com nomes iguais ou diferentes de tabelas diferentes. A saída exibida terá todas as colunas mostradas individualmente. Ou seja, as colunas serão alinhadas uma ao lado da outra.

UNIÃO:

O operador de conjunto UNION é usado para combinar dados de duas tabelas que possuem colunas com o mesmo tipo de dados. Quando uma UNION é executada, os dados de ambas as tabelas serão coletados em uma única coluna com o mesmo tipo de dados.

Por exemplo:

Veja as duas tabelas mostradas abaixo:

Table t1
Articleno article price manufacturer_id
1 hammer 3 $ 1
2 screwdriver 5 $ 2

Table t2
manufacturer_id manufacturer
1 ABC Gmbh
2 DEF Co KG

Agora, para executar um tipo JOIN, a consulta é mostrada abaixo.

SELECT articleno, article, manufacturer
FROM t1 JOIN t2 ON (t1.manufacturer_id =
t2.manufacturer_id);

articelno article manufacturer
1 hammer ABC GmbH
2 screwdriver DEF Co KG

Isso é uma junção.

UNION significa que você precisa criar tabelas ou conjunto de resultados com a mesma quantidade e tipo de colunas e adicioná-lo a tabelas / conjuntos de resultados juntos. Veja este exemplo:

Table year2006
Articleno article price manufacturer_id
1 hammer 3 $ 1
2 screwdriver 5 $ 2

Table year2007
Articleno article price manufacturer_id
1 hammer 6 $ 3
2 screwdriver 7 $ 4

SELECT articleno, article, price, manufactruer_id
FROM year2006
UNION
SELECT articleno, article, price, manufacturer_id
FROM year2007

articleno article price manufacturer_id
1 hammer 3 $ 1
2 screwdriver 5 $ 2
1 hammer 6 $ 3
2 screwdriver 7 $ 4

21

São coisas completamente diferentes.

Uma junção permite relacionar dados semelhantes em tabelas diferentes.

Uma união retorna os resultados de duas consultas diferentes como um único conjunto de registros.


9

O Union faz duas consultas parecerem uma. Associações são para examinar duas ou mais tabelas em uma única instrução de consulta


3

Uniões e uniões podem ser usadas para combinar dados de uma ou mais tabelas. A diferença está na forma como os dados são combinados.

Em termos simples, as junções combinam dados em novas colunas. Se duas tabelas forem unidas, os dados da primeira tabela serão mostrados em um conjunto de colunas ao lado da coluna da segunda tabela na mesma linha.

Os sindicatos combinam dados em novas linhas. Se duas tabelas forem "unidas" juntas, os dados da primeira tabela estarão em um conjunto de linhas e os dados da segunda tabela em outro conjunto. As linhas estão no mesmo resultado.


1

Lembre-se de que a união mesclará resultados ( SQL Server, com certeza) (recurso ou bug?)

select 1 as id, 3 as value
union
select 1 as id, 3 as value

id, valor

1,3

select * from (select 1 as id, 3 as value) t1 inner join (select 1 as id, 3 as value) t2 on t1.id = t2.id

id, valor, id, valor

1,3,1,3


6
Isso é de acordo com o padrão ANSI, UNION ALL não mesclar os resultados
vzczc

1
Veja também UNIONvs UNION ALL stackoverflow.com/questions/49925/…
Jaider

0

1. A cláusula SQL Joins é usada para combinar registros de duas ou mais tabelas em um banco de dados. Um JOIN é um meio de combinar campos de duas tabelas usando valores comuns a cada um.

2. O operador SQL UNION combina o resultado de duas ou mais instruções SELECT. Cada instrução SELECT dentro do UNION deve ter o mesmo número de colunas. As colunas também devem ter tipos de dados semelhantes. Além disso, as colunas em cada instrução SELECT devem estar na mesma ordem.

por exemplo: tabela 1 clientes / tabela 2 pedidos

junção interna:

SELECIONE ID, NOME, VALOR, DATA

DE CLIENTES


INNER JUNTAR PEDIDOS


ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

União:

SELECIONE ID, NOME, VALOR, DATA


DE CLIENTES


ORDENS DE JUNTA ESQUERDA


ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID

UNIÃO

SELECIONAR ID, NOME, VALOR, DATA DOS CLIENTES


ENCOMENDAR DIREITOS


ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;


0

Utilizando UNION

UNION é combina os resultados de duas ou mais consultas em um único conjunto de resultados que inclui todas as linhas que pertencem a todas as consultas na união.

Exemplo UNION:
SELECIONE 121 AS [Coluna1], 221 AS [Coluna2]
UNIÃO
SELECIONE 321 AS [Coluna1], 422 AS [Coluna2]
Resultado:

Coluna1 Coluna2
-------------------
121 221
321 422

Usando JOINs

JOINs, você pode recuperar dados de duas ou mais tabelas com base em relacionamentos lógicos entre as tabelas.

Exemplo de JOIN:
SELECT a.Column1, b.Column2 FROM TblA a INNER JOIN TblB b ON a.Id = b.id


-1

Em resumo, eles são semelhantes, pois duas tabelas ou conjuntos de resultados estão sendo combinados, mas UNION é realmente para combinar conjuntos de resultados com o MESMO NÚMERO DE COLUNAS com as COLUNAS QUE TÊM TIPOS DE DADOS SIMILARES. A estrutura é a mesma, apenas novas linhas estão sendo adicionadas.

Nas junções, você pode combinar tabelas / conjuntos de resultados com qualquer estrutura possível, incluindo uma junção cartesiana onde NÃO há colunas compartilhadas / similares.


-1

O operador UNION é apenas para combinar duas ou mais instruções SELECT.

Enquanto JOIN é para selecionar linhas de cada tabela, pelo método interno, externo, esquerdo ou direito.

Consulte aqui e aqui . Há uma explicação melhor com exemplos.


-1

Operação da União é resultado combinado do Agregado Vertical das linhas, Operação da União é resultado combinado do Agregado Horizontal das Colunas.


-3

Eu gosto de pensar na diferença geral como sendo:

  • JOINS juntar tabelas
  • UNION (e tudo) combina consultas.

1
Isso levanta a questão - a junção é mencionada em termos de "junção" e a união é mencionada em termos de "combinações" inexplicáveis. Enfim, o que você acha que estaria adicionando além de outras respostas de 10 anos altamente votadas que tornam isso "útil"? (Retórica.) Veja o texto do mouse sobre a seta de votação.
precisa saber é
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.