Qual è la differenza tra JOIN e UNION?


252

Qual è la differenza tra JOINe UNION? Posso avere un esempio?


Qualsiasi DBS moderno, come MariaDB , implementa un comando UNION JOIN. Questo è un comando SQL & nbsp; 3 , ma non è ben noto o utilizzato. Ulteriori informazioni su UNION JOIN .
Auston,

Risposte:


301

UNIONmette le righe una dopo l'altra, mentre JOINcrea un prodotto cartesiano e lo sottopone a operazioni completamente diverse. Esempio fondamentale di UNION:

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

esempio banale simile di 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
Potete per favore dirmi cos'è un UNION-JOINe come posso realizzarlo in SQL standard? Maria DB ha un comando union join, ma altri database no. Grazie.
Erran Morad,

73

I join e i sindacati possono essere utilizzati per combinare i dati di una o più tabelle. La differenza sta nel modo in cui i dati vengono combinati.

In termini semplici, i join combinano i dati in nuove colonne . Se due tabelle vengono unite insieme, i dati della prima tabella vengono visualizzati in un set di colonne accanto alla colonna della seconda tabella nella stessa riga.

I sindacati combinano i dati in nuove righe. Se due tabelle vengono "unite" insieme, i dati della prima tabella si trovano in un set di righe e i dati della seconda tabella in un altro set. Le righe hanno lo stesso risultato.

Ecco una rappresentazione visiva di un join. Le colonne delle tabelle A e B sono combinate in un unico risultato.

inserisci qui la descrizione dell'immagine

Ogni riga nel risultato contiene colonne di ENTRAMBE la tabella A e B. Le righe vengono create quando le colonne di una tabella corrispondono a colonne di un'altra. Questa partita si chiama condizione di join.

Questo rende i join davvero fantastici per cercare valori e includerli nei risultati. Questo di solito è il risultato della denormalizzazione (invertendo la normalizzazione) e implica l'uso della chiave esterna in una tabella per cercare i valori di colonna usando la chiave primaria in un'altra.

Ora confronta la rappresentazione sopra con quella di un sindacato. In un'unione ogni riga all'interno del risultato proviene da una tabella O dall'altra. In un'unione, le colonne non vengono combinate per creare risultati, le righe vengono combinate.

inserisci qui la descrizione dell'immagine

Sia i join che i sindacati possono essere utilizzati per combinare i dati di una o più tabelle in un singolo risultato. Entrambi sostengono che ciò è diverso. Mentre un join viene utilizzato per combinare colonne di tabelle diverse, l'unione viene utilizzata per combinare righe.

fonte


4
Questo è un fantastico esempio visivo. Ero abbastanza sicuro di aver capito dopo le altre risposte, ma questo mi ha chiarito completamente.
seadoggie01,

Per l'esempio di join, tecnicamente parlando, non dovrebbero esserci 10 colonne per il risultato?
Bharath Ram,

60

UNION combina i risultati di due o più query in un unico set di risultati che include tutte le righe che appartengono a tutte le query nell'unione.

Utilizzando JOIN , è possibile recuperare i dati da due o più tabelle in base alle relazioni logiche tra le tabelle. I join indicano come SQL dovrebbe utilizzare i dati di una tabella per selezionare le righe in un'altra tabella.

L'operazione UNION è diversa dall'uso di JOIN che combinano colonne da due tabelle.

Esempio UNION:

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

Produzione:

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

Esempio JOIN:

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

Ciò genererà tutte le righe da entrambe le tabelle per le quali la condizione a.Id = b.AFKIdè vera.


Join può recuperare dati da una * o più tabelle. Non necessariamente due
Kennet Celeste il

51

Potresti vedere le stesse spiegazioni schematiche per entrambi, ma queste sono totalmente confuse.

Per UNION:

Inserisci qui la descrizione dell'immagine

Per ISCRIVITI:

Inserisci qui la descrizione dell'immagine


9
Queste immagini implicano che FULL OUTER JOINsia la stessa UNION, che hanno differenze
icc97,

1
Questa risposta sottolinea che quelle immagini sono confuse (quale IMO sono) ma non continua a spiegare perché o offrire alcun chiarimento verso la domanda originale.
Josh D.

1
Ogni immagine con diagrammi spiega perfettamente la situazione. Non esiste un'unica immagine che possa unire tutti i diagrammi. Sarà più confuso.
Java Main

41

ADERIRE:

Un join viene utilizzato per visualizzare colonne con nomi uguali o diversi da tabelle diverse. L'output visualizzato avrà tutte le colonne mostrate singolarmente. Cioè, le colonne saranno allineate l'una accanto all'altra.

UNIONE:

L'operatore set UNION viene utilizzato per combinare i dati di due tabelle con colonne con lo stesso tipo di dati. Quando viene eseguita un'unità UNION, i dati di entrambe le tabelle verranno raccolti in una singola colonna con lo stesso tipo di dati.

Per esempio:

Vedi le due tabelle mostrate di seguito:

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

Ora per eseguire un tipo JOIN la query è mostrata di seguito.

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

Questo è un join.

UNION significa che devi tabelle o set di risultati con lo stesso numero e tipo di colonne e sommarli insieme a tabelle / set di risultati. Guarda questo esempio:

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

Sono cose completamente diverse.

Un join consente di mettere in relazione dati simili in tabelle diverse.

Un'unione restituisce i risultati di due query diverse come un singolo recordset.


9

L'unione fa apparire due query come una. I join servono per esaminare due o più tabelle in una singola istruzione di query


3

I join e i sindacati possono essere utilizzati per combinare i dati di una o più tabelle. La differenza sta nel modo in cui i dati vengono combinati.

In termini semplici, i join combinano i dati in nuove colonne. Se due tabelle vengono unite insieme, i dati della prima tabella vengono visualizzati in un set di colonne accanto alla colonna della seconda tabella nella stessa riga.

I sindacati combinano i dati in nuove righe. Se due tabelle vengono "unite" insieme, i dati della prima tabella si trovano in un set di righe e i dati della seconda tabella in un altro set. Le righe hanno lo stesso risultato.


1

Ricorda che l'unione unirà i risultati ( SQL Server per sicurezza) (funzionalità o bug?)

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

id, valore

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, valore, id, valore

1,3,1,3


6
Questo è secondo lo standard ANSI, UNION ALL non unisce i risultati
vzczc

1
Vedi anche UNIONvs UNION ALL stackoverflow.com/questions/49925/...
Jaider

0

1. La clausola SQL Joins viene utilizzata per combinare i record di due o più tabelle in un database. Un JOIN è un mezzo per combinare campi di due tabelle usando valori comuni a ciascuno.

2. L'operatore SQL UNION combina il risultato di due o più istruzioni SELECT. Ogni istruzione SELECT all'interno di UNION deve avere lo stesso numero di colonne. Le colonne devono anche avere tipi di dati simili. Inoltre, le colonne in ciascuna istruzione SELECT devono essere nello stesso ordine.

ad esempio: tabella 1 clienti / tabella 2 ordini

join interno:

SELEZIONA ID, NOME, IMPORTO, DATA

DAI CLIENTI


ORDINI DI UNIONE INTERNI


ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

unione:

SELEZIONA ID, NOME, IMPORTO, DATA


DAI CLIENTI


ORDINI DI UNIONE SINISTRA


ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID

UNIONE

SELEZIONA ID, NOME, IMPORTO, DATA DEI CLIENTI


ORDINI ISCRITTI A DESTRA


ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;


0

Usando UNION

UNION combina i risultati di due o più query in un unico set di risultati che include tutte le righe che appartengono a tutte le query nell'unione.

Esempio UNION:
SELEZIONA 121 AS [Colonna1], 221 AS [Colonna2]
UNIONE
SELEZIONA 321 AS [Colonna1], 422 AS [Colonna2]
Produzione:

Colonna1 Colonna2
-------------------
121 221
321 422

Usando JOINs

JOIN, è possibile recuperare i dati da due o più tabelle in base alle relazioni logiche tra le tabelle.

Esempio JOIN:
SELEZIONA a.Column1, b.Column2 FROM TblA a INNER JOIN TblB b ON a.Id = b.id


-1

In astratto, sono simili, in quanto due tabelle o set di risultati vengono combinati, ma UNION è realmente per combinare set di risultati con lo STESSO NUMERO DI COLONNE con le COLONNE CHE HANNO SIMILI TIPI DI DATI. STRUTTURA è la stessa, vengono aggiunte solo nuove righe.

Nei join, è possibile combinare tabelle / set di risultati con qualsiasi struttura possibile, incluso un join cartesiano in cui NON sono presenti colonne condivise / simili.


-1

L'operatore UNION serve solo a combinare due o più istruzioni SELECT.

Mentre JOIN serve per selezionare le righe da ciascuna tabella, con il metodo interno, esterno, sinistro o destro.

Fare riferimento qui e qui . C'è una spiegazione migliore con esempi.


-1

L'operazione unione è il risultato dell'aggregazione verticale delle righe, l'operazione unione è il risultato dell'aggregazione orizzontale delle colonne.


-3

Mi piace pensare alla differenza generale come:

  • UNISCITI alle tabelle di join
  • UNION (et all) combina query.

1
Questo fa sorgere la domanda: l'unione è menzionata in termini di "unione" e l'unione è menzionata in termini di "combinazioni" inspiegabili. In ogni caso, cosa pensi che aggiungeresti al di là di altre risposte di 10 anni altamente votate che lo rendono "utile"? (Retorico.) Vedi il testo con il mouse sulla freccia di voto.
philipxy
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.