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.