Risposte:
UNION
mette le righe una dopo l'altra, mentre JOIN
crea 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)
UNION-JOIN
e come posso realizzarlo in SQL standard? Maria DB ha un comando union join
, ma altri database no. Grazie.
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.
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.
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.
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.
Potresti vedere le stesse spiegazioni schematiche per entrambi, ma queste sono totalmente confuse.
Per UNION:
Per ISCRIVITI:
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.
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
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.
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.
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
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;
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
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.
Mi piace pensare alla differenza generale come: