LEFT JOIN vs. LEFT OUTER JOIN w SQL Server

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

Author: Quiver, 2009-01-02

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?.

Tutaj wpisz opis obrazka

 1851
Author: Lasse Vågsæther Karlsen,
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:

  1. INNER
  2. zewnętrzne
  3. krzyż

  1. INNER JOIN - pobiera dane, jeśli są obecne w obu tabelach.

  2. Złącze zewnętrzne {[20] } są z 3 rodzaje:

    1. LEFT OUTER JOIN - pobiera dane, jeśli są obecne w lewej tabeli.
    2. RIGHT OUTER JOIN - pobiera dane, jeśli znajdują się w odpowiedniej tabeli.
    3. FULL OUTER JOIN - pobiera dane, jeśli są obecne w jednej z dwóch tabel.
  3. 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 klauzuli FROM instrukcji SELECT), używając przecinków do oddzielenia oni.


Punkty do odnotowania:

  • Jeśli tylko wspomnisz JOIN to domyślnie jest to INNER 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 lub RIGHT JOIN lub FULL JOIN.

Dla tych, którzy chcą wizualizować je w lepszy sposób, przejdź do tego linku: a Visual Explanation of SQL Joins

 627
Author: sactiw,
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.

 281
Author: Mitch Wheat,
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
 117
Author: Damian Drygiel,
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:

"słowa INNER i OUTER są opcjonalne we wszystkich formach. INNER jest domyślną; LEFT, RIGHT, / align = "left" / "

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

 54
Author: andrefsp,
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

Nic dodać nic ująć:Tutaj wpisz opis obrazka

 44
Author: Gisway,
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

Tutaj wpisz opis obrazka

Left Join and Left Outer Join

Tutaj wpisz opis obrazka

Wyniki

Tutaj wpisz opis obrazka


Right Join i Right Outer Join

Tutaj wpisz opis obrazka

Wyniki

Tutaj wpisz opis obrazka

 42
Author: WorkSmarter,
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.

 34
Author: frozenjim,
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.

 26
Author: Yugo Amaryl,
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

  1. Inner: pobiera dane, które są obecne w obu tabelach
    • tylko JOIN oznacza połączenie wewnętrzne
  2. 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"
  3. Cross Join: łączy wszystko ze wszystkim

 15
Author: Harsh,
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 Tutaj wpisz opis obrazka

 14
Author: mass,
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    
    
Mam nadzieję, że to pomoże.
 13
Author: Delickate,
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.

 12
Author: Unsliced,
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 i LEFT OUTER JOIN są takie same.

Według DoFactory

 0
Author: Moes,
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.

 0
Author: Alfin E. R.,
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.

 0
Author: TheEsnSiavashi,
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.

 -6
Author: William Norris,
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