FULL OUTER JOIN vs. FULL JOIN

84

Po prostu baw się zapytaniami i przykładami, aby lepiej zrozumieć sprzężenia. Zauważam, że w SQL Server 2008 następujące dwa zapytania dają takie same wyniki:

SELECT * FROM TableA
FULL OUTER JOIN TableB
ON TableA.name = TableB.name

SELECT * FROM TableA
FULL JOIN TableB
ON TableA.name = TableB.name

Czy wykonują one dokładnie to samo działanie, aby uzyskać te same wyniki, czy też napotkałbym różne wyniki w bardziej skomplikowanym przykładzie? Czy to tylko wymienna terminologia?

CptSupermrkt
źródło
2
Tak, oba zapytania dają takie same wyniki w SQL Server 2008 R2.
CptSupermrkt

Odpowiedzi:

103

Właściwie są takie same. LEFT OUTER JOINjest taki sam jak LEFT JOINi RIGHT OUTER JOINtaki sam jak RIGHT JOIN. Jest to bardziej pouczający sposób na porównanie INNER Join.

Szczegółowe informacje można znaleźć w tym artykule w Wikipedii .

John Woo
źródło
3
Perfekcyjnie, dzięki. Tak wiele samouczków, z którymi się spotkałem, używa ich zgodnie z własnym stylem, bez zauważania, że ​​są takie same.
CptSupermrkt
2
wizualne przedstawienie złączeń: codeproject.com/Articles/33052/…
Hawkeye Parker
37

Microsoft® SQL Server ™ 2000 używa tych słów kluczowych SQL-92 dla zewnętrznych sprzężeń określonych w klauzuli FROM:

  • LEFT OUTER JOIN lub LEFT JOIN

  • RIGHT OUTER JOIN lub RIGHT JOIN

  • FULL OUTER JOIN lub FULL JOIN

Z MSDN

Funkcja full outer joinor full joinzwraca wszystkie wiersze z obu tabel, dopasowując wiersze wszędzie tam, gdzie można dopasować, i umieszczając NULLs w miejscach, w których nie istnieje pasujący wiersz.

Lew
źródło
11

Prawdą jest, że niektóre bazy danych rozpoznają słowo kluczowe OUTER. Niektórzy nie. Tam, gdzie jest rozpoznawane, zwykle jest to opcjonalne słowo kluczowe. Prawie zawsze FULL JOIN i FULL OUTER JOIN robią dokładnie to samo. (Nie mogę wymyślić przykładu, w którym tak nie jest. Czy ktoś może wymyślić jeden?)

To może sprawić, że zaczniesz się zastanawiać: „Dlaczego miałoby to być słowo kluczowe, jeśli nie ma znaczenia?” Odpowiedź sprowadza się do stylu programowania.

W dawnych czasach programiści starali się, aby ich kod był jak najmniejszy. Każda postać oznaczała dłuższy czas przetwarzania. Użyliśmy zmiennych 1, 2 i 3 literowych. Użyliśmy 2-cyfrowych lat. Wyeliminowaliśmy wszystkie niepotrzebne odstępy. Niektórzy ludzie nadal programują w ten sposób. Nie chodzi już o czas przetwarzania. Chodzi bardziej o szybkie kodowanie.

Współcześni programiści uczą się używać bardziej opisowych zmiennych i umieszczać więcej uwag i dokumentacji w swoim kodzie. Używając dodatkowych słów, takich jak OUTER, upewnij się, że inne osoby, które czytają kod, będą miały łatwiejszy czas na jego zrozumienie. Będzie mniej niejasności. Ten styl jest dużo bardziej czytelny i milszy dla ludzi w przyszłości, którzy będą musieli utrzymywać ten kod.

Marvin M.
źródło