LEFT JOIN vs. LEFT OUTER JOIN w SQL Server
Jaka jest różnica między LEFT JOIN
a LEFT OUTER JOIN
?
17 answers
Zgodnie z dokumentacją: FROM (Transact-SQL):
<join_type> ::=
[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
JOIN
Słowo kluczowe OUTER
jest oznaczone jako opcjonalne( zamknięte w nawiasach kwadratowych), a to oznacza w tym przypadku, że to, czy go podasz, czy nie, nie ma znaczenia. Zauważ, że podczas gdy pozostałe elementy klauzuli join są również oznaczone jako opcjonalne, pozostawienie będzie oczywiście miało znaczenie.
Na przykład, cała część typu klauzuli JOIN
jest opcjonalna, w takim przypadku domyślna jest INNER
, Jeśli tylko podasz JOIN
. Innymi słowy, jest to legalne:
SELECT *
FROM A JOIN B ON A.X = B.Y
Oto lista równoważnych składni:
A LEFT JOIN B A LEFT OUTER JOIN B
A RIGHT JOIN B A RIGHT OUTER JOIN B
A FULL JOIN B A FULL OUTER JOIN B
A INNER JOIN B A JOIN B
Również spojrzeć na odpowiedź zostawiłem na tym innym więc pytanie: SQL lewo join vs wiele tabel na linii?.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:37
Aby odpowiedzieć na twoje pytanie nie ma różnicy między lewym połączeniem / align = "left" / ..
Na najwyższym poziomie są głównie 3 rodzaje złączy:
- INNER
- zewnętrzne
- krzyż
INNER JOIN - pobiera dane, jeśli są obecne w obu tabelach.
-
Złącze zewnętrzne {[20] } są z 3 rodzaje:
-
LEFT OUTER JOIN
- pobiera dane, jeśli są obecne w lewej tabeli. -
RIGHT OUTER JOIN
- pobiera dane, jeśli znajdują się w odpowiedniej tabeli. -
FULL OUTER JOIN
- pobiera dane, jeśli są obecne w jednej z dwóch tabel.
-
CROSS JOIN , jak sama nazwa wskazuje, robi
[n X m]
, która łączy wszystko ze wszystkim.
Podobnie jak w scenariuszu, w którym po prostu wypisujemy tabele do łączenia (w klauzuliFROM
instrukcjiSELECT
), używając przecinków do oddzielenia oni.
Punkty do odnotowania:
- Jeśli tylko wspomnisz
JOIN
to domyślnie jest toINNER JOIN
. - an
OUTER
dołączyć musi byćLEFT
|RIGHT
|FULL
nie można po prostu powiedziećOUTER JOIN
. - możesz zostawić
OUTER
słowo kluczowe i po prostu powiedziećLEFT JOIN
lubRIGHT JOIN
lubFULL JOIN
.
Dla tych, którzy chcą wizualizować je w lepszy sposób, przejdź do tego linku: a Visual Explanation of SQL Joins
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-14 09:38:02
Jaka jest różnica między lewym złączem a lewym złączem zewnętrznym?
Nic . LEFT JOIN
i {[1] } są równoważne.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-22 00:03:40
Czytaj więcej w wizualna reprezentacja łączników SQL
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-28 23:02:37
Jestem PostgreSQL DBA, o ile mogłem zrozumieć różnicę między zewnętrznymi lub nie zewnętrznymi połączeniami różnica jest tematem, który ma znaczną dyskusję w całym Internecie. Do dzisiaj nigdy nie widziałem różnicy między tymi dwoma; więc poszedłem dalej i staram się znaleźć różnicę między nimi. Na koniec przeczytałem całą dokumentację na ten temat i znalazłem na to odpowiedź,
Więc jeśli zajrzysz do dokumentacji (przynajmniej w PostgreSQL) znajdziesz to fraza:
Innymi słowy,
LEFT JOIN
i LEFT OUTER JOIN
są tymi samymi
RIGHT JOIN
and RIGHT OUTER JOIN
ARE THE SAME
Mam nadzieję, że może to być wkład dla tych, którzy wciąż próbują znaleźć odpowiedź.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-23 03:42:32
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-12 22:05:00
Left Join
i Left Outer Join
są jednym i tym samym . Pierwszy jest skrótem od drugiego. To samo można powiedzieć o relacjach Right Join
i Right Outer Join
. Demonstracja zilustruje równość. Przykłady robocze każdego zapytania zostały dostarczone przez SQL Fiddle . To narzędzie pozwoli na ręczną manipulację zapytaniem.
Given
Wyniki
Wyniki
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-14 23:06:26
Łatwiej mi myśleć o połączeniach w następującej kolejności:
- połączenie krzyżowe - iloczyn kartezjański obu tabel. Wszystkie połączenia zaczynają się tutaj
- INNER JOIN - połączenie krzyżowe z dodanym filtrem.
- OUTER JOIN - połączenie wewnętrzne z brakującymi elementami (z lewej lub prawej tabeli) dodane później.
Dopóki nie rozgryzłem tego (stosunkowo) prostego modelu, łączniki były zawsze trochę bardziej czarną sztuką. Teraz mają sens.
Hope this helps more niż się myli.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-29 21:01:36
Dlaczego Lewa / Prawa i lewa zewnętrzna / prawa zewnętrzna są takie same? Wyjaśnijmy, dlaczego to słownictwo. Zrozum, że lewe i prawe złącza są szczególnymi przypadkami połączenia zewnętrznego, a zatem nie może być niczym innym niż ZEWNĘTRZNE LEWE/ZEWNĘTRZNE PRAWE. Zewnętrzne połączenie jest również nazywane pełnym zewnętrznym w przeciwieństwie do lewego i prawego połączenia, które są częściowym wynikiem zewnętrznego połączenia. Rzeczywiście:
Table A | Table B Table A | Table B Table A | Table B Table A | Table B
1 | 5 1 | 1 1 | 1 1 | 1
2 | 1 2 | 2 2 | 2 2 | 2
3 | 6 3 | null 3 | null - | -
4 | 2 4 | null 4 | null - | -
null | 5 - | - null | 5
null | 6 - | - null | 6
OUTER JOIN (FULL) LEFT OUTER (partial) RIGHT OUTER (partial)
Teraz jest jasne, dlaczego te operacje mają aliasy, a także jest jasne tylko 3 przypadki istnieją: wewnętrzne, zewnętrzne, krzyżowe. Z dwiema obudowami zewnętrznymi. Słownictwo, sposób, w jaki nauczyciele to wyjaśniają, a także niektóre odpowiedzi powyżej, często sprawiają, że wygląda na to, że istnieje wiele różnych rodzajów przyłączenia. Ale to bardzo proste.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-17 21:15:11
Istnieją głównie trzy rodzaje łączenia
- Inner: pobiera dane, które są obecne w obu tabelach
- tylko JOIN oznacza połączenie wewnętrzne
-
Zewnętrzne: są trzy rodzaje
- LEFT OUTER - - pobiera dane obecne tylko w left table & pasujący warunek
- RIGHT OUTER - - pobiera dane obecne tylko w prawej tabeli i warunek dopasowania
- FULL OUTER - - pobiera dane obecne w dowolnej lub obu tabelach
- (lewy lub prawy lub pełny) złącze zewnętrzne można pisać bez zapisu "OUTER"
-
Cross Join: łączy wszystko ze wszystkim
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-18 12:59:50
Aby odpowiedzieć na twoje pytanie
W SQL Server dołącza składnię OUTER jest opcjonalne
Jest wspomniany w artykule msdn: https://msdn.microsoft.com/en-us/library/ms177634(v=sql. 130). aspx
Tak więc poniższa lista pokazuje składnie równoważne z i bez zewnętrzne
LEFT OUTER JOIN => LEFT JOIN
RIGT OUTER JOIN => RIGHT JOIN
FULL OUTER JOIN => FULL JOIN
Inne równoważne składnie
INNER JOIN => JOIN
CROSS JOIN => ,
Zdecydowanie polecam Dotnet Mob article: dołącza do Sql Server
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-25 04:05:20
Są tylko 3 połączenia:
- A) Połączenie krzyżowe = kartezjańskie (np. Tabela A, Tabela B)
- B) Inner Join = JOIN (np: Table a Join / Inner Join Table B)
-
C) złącze zewnętrzne:
There are three type of outer join 1) Left Outer Join = Left Join 2) Right Outer Join = Right Join 3) Full Outer Join = Full Join
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-17 09:56:33
Składniowy cukier, sprawia, że bardziej oczywiste dla zwykłego czytelnika, że połączenie nie jest wewnętrzne.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-10 20:28:11
LEFT JOIN
wykonuje połączenie rozpoczynające się od pierwszej (z lewej) tabeli, a następnie od każdego pasującego drugiego (z prawej) rekordu tabeli.
LEFT JOIN
iLEFT OUTER JOIN
są takie same.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-14 00:53:11
Zarówno w lewym złączu, jak i lewym zewnętrznym złączu wykonującym te same operacje.
W zasadzie lewe połączenie zawiera wszystkie rekordy z tabeli 1 i tylko pasujące rekordy z tabeli 2.
Nie dostarcza niezrównanych rekordów z tabeli 2.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-19 06:13:16
Jak już wspomniano tutaj, nie ma różnicy. Świat kluczy OUTER
może zostać usunięty ze słownika słów kluczowych SQL bez utraty mocy ekspresyjnej na zapytania, które jesteśmy w stanie napisać.
Nie potrzebujemy również zarówno RIGHT
, jak i LEFT
słów kluczowych, ponieważ wystarczy tylko jeden z nich. Dzieje się tak dlatego, że SELECT * FROM A RIGHT JOIN B on A.ID = B.ID
jest dokładnie taka sama jak SELECT * FROM B LEFT JOIN A on A.ID = B.ID
. Znalazłem wszystkie te dodatkowe terminy mylące studentów i początkujących ludzi.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-25 23:04:56
Wiem, że to jest stare, ale chciałem włożyć moje dwa grosze. Rozumiem, że LEFT JOIN
powinno być to samo co LEFT OUTER JOIN
, ale z mojego doświadczenia widziałem LEFT JOIN
wyciągnąć Inne wyniki niż LEFT OUTER JOIN
więc zacząłem używać słowa kluczowego OUTER
być bardziej szczegółowe i właściwe. Wiersze, które powinny wrócić w LEFT JOIN
nie były tam, gdzie używałem LEFT OUTER JOIN
. Próbowałem wyjaśnić to koledze, gdy nie był w stanie uzyskać wierszy, które również potrzebne, więc postanowiłem Wygoogluj różnicę tak, aby mieć jakieś wsparcie, aby mu pokazać. Może to być specyficzna rzecz SQL Server, co do której jestem niepewny. Powiedziałbym, że w dobrej praktyce byłoby bardziej wskazane, aby wyraźnie stwierdzić, że chcesz, aby doszło do połączenia zewnętrznego. To tylko moje zdanie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-16 05:31:49