Jaka jest różnica między LEFT JOIN
i LEFT OUTER JOIN
?
Jaka jest różnica między LEFT JOIN
i LEFT OUTER JOIN
?
Odpowiedzi:
Zgodnie z dokumentacją: FROM (Transact-SQL) :
<join_type> ::=
[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
JOIN
Słowo kluczowe OUTER
jest oznaczone jako opcjonalne (ujęte w nawias kwadratowy). W tym konkretnym przypadku, czy podasz OUTER
czy nie, nie ma znaczenia. Należy zauważyć, że podczas gdy inne elementy dołączyć klauzuli jest również oznaczone jako opcjonalne, pozostawiając je na zewnątrz będzie zrobić różnicę.
Na przykład cała część typu JOIN
klauzuli jest opcjonalna, w takim przypadku domyślną wartością jest, INNER
jeśli tylko ją określisz 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
Spójrz także na odpowiedź, którą zostawiłem na to inne SO pytanie: SQL pozostawił złączenie vs wiele tabel na linii FROM? .
INNER JOIN
po prawej i tylko JOIN
po lewej stronie na liście ekwiwalentów?
JOIN
s.
Aby odpowiedzieć na twoje pytanie, nie ma różnicy między LEFT JOIN a LEFT OUTER JOIN, są one dokładnie takie same , jak ...
DOŁĄCZ DO WEWNĘTRZNEGO - pobiera dane, jeśli występują w obu tabelach.
DOŁĄCZ DO ZEWNĘTRZNEGO są 3 rodzaje:
LEFT OUTER JOIN
- pobiera dane, jeśli występują w lewej tabeli.RIGHT OUTER JOIN
- pobiera dane, jeśli występują w odpowiedniej tabeli.FULL OUTER JOIN
- pobiera dane, jeśli występują w jednej z dwóch tabel.CROSS JOIN , jak sama nazwa wskazuje, [n X m]
łączy to wszystko ze wszystkim.
Podobnie do scenariusza, w którym po prostu podajemy tabele do łączenia (w FROM
klauzuli SELECT
instrukcji), używając przecinków, aby je rozdzielić.
Punkty do odnotowania:
JOIN
to domyślnie jest to INNER JOIN
.OUTER
Dołączyć musi być LEFT
| RIGHT
| FULL
nie możesz po prostu powiedzieć OUTER JOIN
.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: Objaśnienie połączeń SQL
CROSS JOIN
to samo co FULL JOIN
?
Cross Join
i Full Outer Join
... w pewien sposób wydaje się podobny.
Jaka jest różnica między lewym złączeniem a lewym złączeniem zewnętrznym?
Nic . LEFT JOIN
i LEFT OUTER JOIN
są równoważne.
OUTER
jest to opcjonalne.
Jestem DBA PostgreSQL, o ile mogłem zrozumieć różnicę między zewnętrznymi lub 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; Poszedłem więc dalej i staram się znaleźć różnicę między nimi. Na koniec przeczytałem całą dokumentację na ten temat i znalazłem odpowiedź na to,
Więc jeśli spojrzysz na dokumentację (przynajmniej w PostgreSQL), możesz znaleźć tę frazę:
Innymi słowy,
LEFT JOIN
i są takie LEFT OUTER JOIN
same
RIGHT JOIN
i są takie RIGHT OUTER JOIN
same
Mam nadzieję, że może to być pomocne dla tych, którzy wciąż próbują znaleźć odpowiedź.
Left Join
i Left Outer Join
są jednym i tym samym . Ten pierwszy jest skrótem od drugiego. To samo można powiedzieć o związku Right Join
i Right Outer Join
związku. Demonstracja zilustruje równość. Robocze przykłady każdego zapytania zostały dostarczone przez SQL Fiddle . To narzędzie pozwoli na manipulowanie zapytaniem.
Dany
Wyniki
Wyniki
Łatwiej jest mi myśleć o połączeniach w następującej kolejności:
Dopóki nie doszedłem do tego (relatywnie) prostego modelu, ŁĄCZENIA były zawsze bardziej czarną sztuką. Teraz mają doskonały sens.
Mam nadzieję, że to pomaga bardziej niż myli.
Dlaczego LEWE / PRAWE i LEWE ZEWNĘTRZNE / PRAWE ZEWNĘTRZNE są takie same? Wyjaśnijmy, dlaczego to słownictwo. Zrozum, że złączenia LEWE i PRAWE są szczególnymi przypadkami złączenia ZEWNĘTRZNEGO, a zatem nie może być niczym innym niż ZEWNĘTRZNY LEWY / ZEWNĘTRZNY PRAWY. Złączenie OUTER jest również nazywane PEŁNYM ZEWNĘTRZNYM, w przeciwieństwie do złączeń LEWY i PRAWY, które są CZĘŚCIOWYMI wynikami złączenia ZEWNĘTRZNEGO. W rzeczy samej:
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 jasne, że istnieją tylko 3 przypadki: WEWNĘTRZNE, ZEWNĘTRZNE, KRZYŻOWE. Z dwoma pod-skrzynkami dla OUTER. Słownictwo, sposób, w jaki tłumaczą to nauczyciele, a także niektóre powyższe odpowiedzi często sprawiają, że wygląda na to, że istnieje wiele różnych rodzajów łączenia. Ale w rzeczywistości jest to bardzo proste.
JOIN
implikuje INNER JOIN
” pasuje do twojego rozumowania zewnętrznego słownika łączenia?
Odpowiedzieć na Twoje pytanie
W Sql Server dołącza składnia OUTER jest opcjonalna
Jest wspomniany w artykule msdn: https://msdn.microsoft.com/en-us/library/ms177634(v=sql.130).aspx
Tak więc poniższa lista pokazuje łączenie równoważnych składni zi bez parametru OUTER
LEFT OUTER JOIN => LEFT JOIN
RIGHT OUTER JOIN => RIGHT JOIN
FULL OUTER JOIN => FULL JOIN
Inne równoważne składnie
INNER JOIN => JOIN
CROSS JOIN => ,
Gorąco polecam Dotnet Mob Artice: Dołącza do Sql Server
C) Łączenie 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.
Istnieją głównie trzy rodzaje DOŁĄCZENIA
Zewnętrzne: są trzech rodzajów
Cross Join: łączy wszystko ze wszystkim
Cukier syntaktyczny sprawia, że zwykły czytelnik staje się bardziej oczywisty, że połączenie nie jest wewnętrznym.
Właśnie w kontekście tego pytania chcę również opublikować 2 operatorów „ZASTOSUJ”:
ŁĄCZY :
DOŁĄCZ DO WEWNĘTRZNEGO = DOŁĄCZ
DOŁĄCZ DO ZEWNĄTRZ
LEWE DOŁĄCZENIE ZEWNĘTRZNE = LEWE DOŁĄCZENIE
PRAWE DOŁĄCZENIE DO ZEWNĘTRZNEGO = PRAWE DOŁĄCZENIE
FULL OUTER JOIN = PEŁNE DOŁĄCZENIE
KRZYŻ DOŁĄCZ
SAMOŁĄCZENIE : To nie jest dokładnie osobny typ złączenia. Jest to w zasadzie łączenie tabeli z samym sobą za pomocą jednego z powyższych sprzężeń. Ale czułem, że warto wspomnieć w kontekście dyskusji JOIN, ponieważ usłyszysz ten termin od wielu członków społeczności SQL Developer.
ZASTOSUJ :
https://www.mssqltips.com/sqlservertip/1958/sql-server-cross-apply-and-outer-apply/
https://sqlhints.com/2016/10/23/outer-apply-in-sql-server/
Przykład z życia, kiedy należy użyć ZEWNĘTRZNEJ / KRZYŻOWEJ APLIKACJI w SQL
Uważam, że operator APPLY jest bardzo korzystny, ponieważ zapewnia lepszą wydajność niż konieczność wykonywania tych samych obliczeń w podzapytaniu. Zastępują one także wiele funkcji analitycznych w starszych wersjach SQL Server. Dlatego uważam, że po zapoznaniu się z JOINS jeden programista SQL powinien następnie spróbować nauczyć się operatorów APPLY.
OUTER
kluczowe jest opcjonalne.