Jaka jest różnica między JOIN a UNION?


Odpowiedzi:


301

UNIONumieszcza po sobie wiersze z zapytań, a jednocześnie JOINtworzy produkt kartezjański i dzieli go na części - zupełnie inne operacje. Trywialny przykład UNION:

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

podobny trywialny przykład 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
Czy możesz mi powiedzieć, co to jest UNION-JOINi jak mogę to osiągnąć w standardowym języku SQL? Maria DB ma polecenie union join, ale inne bazy danych nie. Dzięki.
Erran Morad

72

Połączenia i związki mogą być używane do łączenia danych z jednej lub więcej tabel. Różnica polega na sposobie łączenia danych.

Mówiąc prościej, sprzężenia łączą dane w nowe kolumny . Jeśli dwie tabele zostaną połączone, dane z pierwszej tabeli zostaną wyświetlone w jednym zestawie kolumn obok kolumny drugiej tabeli w tym samym wierszu.

Związki łączą dane w nowe wiersze. Jeśli dwie tabele są „zjednoczone” razem, dane z pierwszej tabeli znajdują się w jednym zestawie wierszy, a dane z drugiej tabeli w innym zestawie. Wiersze mają ten sam wynik.

Oto wizualne przedstawienie złączenia. Kolumny tabeli A i B są łączone w jeden wynik.

wprowadź opis zdjęcia tutaj

Każdy wiersz w wyniku zawiera kolumny z OBA tabeli A i B. Wiersze są tworzone, gdy kolumny z jednej tabeli pasują do kolumn z drugiej. To dopasowanie nazywa się warunkiem dołączenia.

To sprawia, że ​​złączenia są naprawdę świetne do wyszukiwania wartości i włączania ich do wyników. Zwykle jest to wynikiem denormalizacji (normalizacji odwrotnej) i obejmuje użycie klucza obcego w jednej tabeli do wyszukiwania wartości kolumn przy użyciu klucza podstawowego w innej.

Teraz porównaj powyższe przedstawienie ze związkiem. W związku każdy wiersz w wyniku pochodzi z jednej tabeli LUB drugiej. W związku kolumny nie są łączone w celu utworzenia wyników, wiersze są łączone.

wprowadź opis zdjęcia tutaj

Zarówno sprzężenia, jak i związki mogą być używane do łączenia danych z jednej lub więcej tabel w jeden wynik. Obaj zajmują się tym na różne sposoby. Podczas gdy łączenie służy do łączenia kolumn z różnych tabel, łączenie służy do łączenia wierszy.

Źródło


4
To niesamowity wizualny przykład. Byłem całkiem pewien, że zrozumiałem po innych odpowiedziach, ale to całkowicie wyjaśniło.
seadoggie01

Dla przykładu, technicznie rzecz biorąc, czy nie powinno być 10 kolumn dla wyniku?
Bharath Ram

60

UNION łączy wyniki dwóch lub więcej zapytań w jeden zestaw wyników, który zawiera wszystkie wiersze należące do wszystkich zapytań w unii.

Za pomocą JOIN można pobierać dane z dwóch lub więcej tabel w oparciu o logiczne relacje między nimi. Połączenia wskazują, w jaki sposób SQL powinien wykorzystywać dane z jednej tabeli do wybierania wierszy w innej tabeli.

Operacja UNION różni się od używania JOIN, które łączą kolumny z dwóch tabel.

Przykład UNII:

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

Wynik:

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

DOŁĄCZ Przykład:

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

Spowoduje to wyświetlenie wszystkich wierszy z obu tabel, dla których warunek a.Id = b.AFKIdjest spełniony.


Join może pobierać dane z jednej * lub więcej tabel. Niekoniecznie dwa
Kennet Celeste

51

Możesz zobaczyć te same schematyczne wyjaśnienia dla obu, ale są one całkowicie mylące.

Dla UNII:

Wpisz opis zdjęcia tutaj

W przypadku DOŁĄCZENIA:

Wpisz opis zdjęcia tutaj


9
Te obrazy sugerują, że FULL OUTER JOINjest taki sam, jak UNION, które mają różnice
icc97 18.10.17

1
Ta odpowiedź wskazuje, że te obrazy są mylące (którym są IMO), ale nie wyjaśnia dalej, ani nie udziela wyjaśnień w stosunku do pierwotnego pytania.
Josh D.

1
Każdy obraz ze schematami doskonale wyjaśnia sytuację. Nie ma jednego obrazu, który mógłby scalić wszystkie diagramy. To będzie bardziej mylące.
Java Main

41

PRZYSTĄP:

Łączenie służy do wyświetlania kolumn o takich samych lub różnych nazwach z różnych tabel. Wyświetlane dane wyjściowe będą miały wszystkie kolumny pokazane indywidualnie. Oznacza to, że kolumny zostaną wyrównane obok siebie.

UNIA:

Operator zestawu UNION służy do łączenia danych z dwóch tabel zawierających kolumny o tym samym typie danych. Po wykonaniu operacji UNION dane z obu tabel zostaną zebrane w jednej kolumnie o tym samym typie danych.

Na przykład:

Zobacz dwie tabele przedstawione poniżej:

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

Teraz dla wykonania typu JOIN zapytanie jest pokazane poniżej.

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

To jest połączenie.

UNION oznacza, że ​​musisz do tabel lub zestawów wyników z taką samą ilością i typem kolumn i dodajesz to do tabel / zestawów wyników razem. Spójrz na ten przykład:

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

To są zupełnie różne rzeczy.

Dołączyć pozwala odnosić podobne dane w różnych tabelach.

Związek zwraca wyniki dwóch różnych zapytań jako pojedynczy zestaw rekordów.


9

Unia sprawia, że ​​dwa zapytania wyglądają jak jedno. Połączenia służą do badania dwóch lub więcej tabel w jednej instrukcji zapytania


3

Złączeń i związków można używać do łączenia danych z jednej lub więcej tabel. Różnica polega na sposobie łączenia danych.

Mówiąc prościej, sprzężenia łączą dane w nowe kolumny. Jeśli dwie tabele zostaną połączone, dane z pierwszej tabeli zostaną wyświetlone w jednym zestawie kolumn obok kolumny drugiej tabeli w tym samym wierszu.

Związki łączą dane w nowe wiersze. Jeśli dwie tabele są „zjednoczone” razem, dane z pierwszej tabeli znajdują się w jednym zestawie wierszy, a dane z drugiej tabeli w innym zestawie. Wiersze mają ten sam wynik.


1

Pamiętaj, że unia połączy wyniki ( dla pewności SQL Server ) (funkcja czy błąd?)

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

id, wartość

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, wartość, id, wartość

1,3,1,3


6
Jest to zgodne ze standardem ANSI, UNION ALL nie łączy wyników
vzczc

1
Zobacz także UNIONvs UNION ALL stackoverflow.com/questions/49925/…
Jaider

0

1. Klauzula Złączenia SQL służy do łączenia rekordów z dwóch lub więcej tabel w bazie danych. JOIN to sposób łączenia pól z dwóch tabel przy użyciu wspólnych dla nich wartości.

2. Operator SQL UNION łączy wynik dwóch lub więcej instrukcji SELECT. Każda instrukcja SELECT w UNION musi mieć taką samą liczbę kolumn. Kolumny muszą również mieć podobne typy danych. Ponadto kolumny w każdej instrukcji SELECT muszą być w tej samej kolejności.

na przykład: klienci z tabeli 1 / zamówienia z tabeli 2

połączenie wewnętrzne:

WYBIERZ ID, NAZWĘ, KWOTĘ, DATĘ

OD KLIENTÓW


WEWNĘTRZNE ZAMÓWIENIA


ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

unia:

WYBIERZ ID, NAZWĘ, KWOTĘ, DATĘ


OD KLIENTÓW


LEWE DOŁĄCZ DO ZAMÓWIENIA


ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID

UNIA

WYBIERZ ID, NAZWĘ, KWOTĘ, DATĘ OD KLIENTÓW


PRAWE DOŁĄCZ DO ZAMÓWIENIA


ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;


0

Usinging UNION

UNION łączy wyniki dwóch lub więcej zapytań w jeden zestaw wyników, który zawiera wszystkie wiersze należące do wszystkich zapytań w unii.

Przykład UNII:
WYBIERZ 121 AS [Kolumna1], 221 AS [Kolumna2]
UNIA
WYBIERZ 321 AS [kolumna 1], 422 AS [kolumna 2]
Wynik:

Kolumna1 Kolumna2
-------------------
121 221
321 422

Korzystanie z DOŁĄCZENIA

DOŁĄCZ, możesz pobierać dane z dwóch lub więcej tabel w oparciu o logiczne relacje między nimi.

DOŁĄCZ Przykład:
WYBIERZ a. Kolumna 1, b Kolumna 2 OD TblA a WEJŚCIE DO WEJŚCIA TblB b WŁ. A.Id = b. Id


-1

W skrócie są one podobne, ponieważ łączy się dwie tabele lub zestawy wyników, ale UNION naprawdę służy do łączenia zestawów wyników z TĄ SAMĄ LICZBĄ KOLUMN z KOLUMNAMI PODOBNYMI TYPAMI DANYCH. STRUKTURA jest taka sama, dodaje się tylko nowe wiersze.

W złączeniach można łączyć tabele / zestawy wyników z dowolną możliwą strukturą, w tym złączeniem kartezjańskim, w którym NIE ma współdzielonych / podobnych kolumn.


-1

Operator UNION służy do łączenia dwóch lub więcej instrukcji SELECT.

Podczas gdy DOŁĄCZ służy do wybierania wierszy z każdej tabeli, albo za pomocą metody wewnętrznej, zewnętrznej, lewej lub prawej.

Zobacz tutaj i tutaj . Istnieje lepsze wytłumaczenie z przykładami.


-1

Operacja Unii jest połączona w wyniku pionowego agregatu wierszy, Operacja Unii jest połączona w wyniku poziomego agregatu kolumn.


-3

Lubię myśleć o ogólnej różnicy jako:

  • DOŁĄCZ do tabel
  • UNION (i wszystkie) łączy zapytania.

1
To nasuwa pytanie - złączenie jest wymieniane w kategoriach „dołącz”, a związek jest wymieniany w kategoriach niewyjaśnionych „łączeń”. Jak myślisz, co byś dodał poza innymi wysoko głosowanymi 10-letnimi odpowiedziami, które sprawiają, że jest to „przydatne”? (Retoryczne.) Zobacz tekst kursora myszy nad strzałką do głosowania.
philipxy
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.