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

252

Jaka jest różnica między JOINi UNION? Czy mogę podać przykład?

Złoto
źródło
Każdy nowoczesny DBS, jak MariaDB , implementuje polecenie UNION JOIN. To polecenie SQL & nbsp; 3 , ale nie jest dobrze znane ani używane. Dowiedz się więcej na temat UNION JOIN .
Auston,

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)
Alex Martelli
źródło
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

Humoyun Ahmad
ź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.

Kirtan
źródło
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

Java Main
źródło
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
Ganesh Narayan Tharol
źródło
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.

adeshsuryan
źródło
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

James L.
źródło
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.

VAHEED
źródło
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

MonsterMagnet
źródło
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;

Ian
źródło
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

użytkownik6341745
źródło
-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.

danbk99
źródło
-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.

Nishad Up
źródło
-1

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

R.Baldha
źródło
-3

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

  • DOŁĄCZ do tabel
  • UNION (i wszystkie) łączy zapytania.
Laurie
źródło
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