0Pricing
SQL Interview Prep · Lekcja

Semantyka RIGHT i FULL OUTER JOIN

Kiedy potrzebne jest każde z nich i jak przepisać RIGHT jako LEFT

Semantyka RIGHT i FULL OUTER JOIN to bezpłatna lekcja SQL Interview Prep na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Interview Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Interview Prep zawiera 4 lekcji w sumie.

Co dalej po LEFT JOIN

Gdy LEFT JOIN jest już zrozumiałe, rekruterzy sprawdzają jego lustrzane odbicie oraz połączenie obu podejść: RIGHT JOIN i FULL OUTER JOIN.

  • RIGHT JOIN zachowuje każdy wiersz prawej tabeli.
  • FULL OUTER JOIN zachowuje niepasujące wiersze z obu tabel.

Ta lekcja precyzyjnie definiuje oba złączenia i pokazuje sztuczkę z przepisaniem zapytania, którą rekruterzy bardzo lubią: dowolny RIGHT JOIN można zamienić na LEFT JOIN.

Definicja RIGHT JOIN

RIGHT JOIN (lub RIGHT OUTER JOIN) zachowuje każdy wiersz z prawej tabeli, czyli tabeli zapisanej po słowie kluczowym JOIN. Niepasujące wiersze prawej tabeli pojawiają się z wartością NULL w kolumnach lewej tabeli.

To dokładne lustrzane odbicie LEFT JOIN. LEFT zachowuje tabelę wymienioną jako pierwszą, a RIGHT zachowuje tabelę wymienioną jako drugą.

SELECT c.name, o.amount
FROM orders o
RIGHT JOIN customers c
  ON o.customer_id = c.id;
-- keeps ALL customers, even those
-- with no order (Carol -> amount NULL)

Ponownie te same tabele

Te same dane co wcześniej. Carol (klient 3) nie ma żadnego zamówienia. Wszystkie wiersze zamówień odwołują się tutaj do istniejącego klienta, więc gdy zachowywaną stroną jest tabela customers, żadne zamówienie nie jest osierocone.

-- customers           orders
-- 1 | Alice           10 | 1 | 50
-- 2 | Bob             11 | 1 | 75
-- 3 | Carol           12 | 2 | 20

Zastępowanie RIGHT przez LEFT

Puenta rozmowy kwalifikacyjnej: RIGHT JOIN jest w praktyce rzadko używany, ponieważ zawsze można odwrócić kolejność tabel i użyć LEFT JOIN. Poniższe dwa zapytania są logicznie identyczne.

Wiele przewodników stylu całkowicie zabrania RIGHT JOIN, ponieważ czytanie od lewej do prawej i konsekwentne zachowywanie lewej tabeli ułatwia rozumowanie.

-- RIGHT JOIN
SELECT c.name, o.amount
FROM orders o
RIGHT JOIN customers c ON o.customer_id = c.id;

-- Equivalent LEFT JOIN (preferred)
SELECT c.name, o.amount
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id;

Definicja FULL OUTER JOIN

FULL OUTER JOIN zachowuje niepasujące wiersze z obu tabel. Należy myśleć o nim jak o połączeniu LEFT JOIN i RIGHT JOIN:

  • Dopasowane pary pojawiają się normalnie.
  • Wiersze lewej tabeli bez dopasowania: kolumny prawej tabeli mają wartość NULL.
  • Wiersze prawej tabeli bez dopasowania: kolumny lewej tabeli mają wartość NULL.

Odpowiada na potrzebę: „pokaż wszystko z obu stron, dopasowując pasujące wiersze”.

SELECT c.name, o.id AS order_id
FROM customers c
FULL OUTER JOIN orders o
  ON o.customer_id = c.id;

Kiedy FULL OUTER JOIN sprawdza się najlepiej

FULL OUTER JOIN jest podstawowym narzędziem do uzgadniania danych: porównywania dwóch zbiorów danych, które powinny być zgodne, ale mogą się różnić.

Wyobraźmy sobie tabelę orders oraz oddzielną tabelę payments. FULL OUTER JOIN po identyfikatorze zamówienia ujawnia w jednym wyniku zarówno zamówienia bez płatności, jak i płatności bez pasującego zamówienia — każdy taki przypadek jest oznaczony wartościami NULL po stronie brakującego dopasowania.

SELECT o.id AS order_id, p.id AS payment_id
FROM orders o
FULL OUTER JOIN payments p
  ON p.order_id = o.id
WHERE o.id IS NULL OR p.id IS NULL;
-- rows where one side is missing

Świadomość różnic między dialektami

Osoba prowadząca rozmowę może sprawdzić przenośność rozwiązania. MySQL nie ma słowa kluczowego FULL OUTER JOIN (do wersji 8 włącznie). PostgreSQL, SQL Server i Oracle je obsługują.

W MySQL można je emulować, łącząc LEFT JOIN i RIGHT JOIN za pomocą UNION (który usuwa zduplikowane dopasowane wiersze). Znajomość tej różnicy świadczy o praktycznym doświadczeniu.

-- FULL OUTER JOIN emulated in MySQL
SELECT c.name, o.id FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
UNION
SELECT c.name, o.id FROM customers c
RIGHT JOIN orders o ON o.customer_id = c.id;

Cztery typy złączeń w skrócie

Proszę zapamiętać tę tabelę. „Zachowane” oznacza, że niedopasowane wiersze pozostają w wyniku z wartościami NULL.

  • INNER JOIN: tylko dopasowane wiersze. Nic nie jest zachowywane.
  • LEFT JOIN: zachowywane są wszystkie wiersze z lewej strony.
  • RIGHT JOIN: zachowywane są wszystkie wiersze z prawej strony.
  • FULL OUTER JOIN: zachowywane są wiersze z obu stron.

Każde pytanie rekrutacyjne dotyczące złączeń zewnętrznych sprowadza się do wyboru strony lub stron, które należy zachować.

Wybór odpowiedniego złączenia

Proszę wybrać złączenie, zadając sobie pytanie: „Które niedopasowane wiersze muszę zachować?”

  • Jeśli należy zachować tylko wiersze głównej tabeli: LEFT JOIN (główną tabelę należy umieścić jako pierwszą).
  • Jeśli do uzgodnienia potrzebne są oba zbiory niedopasowanych wierszy: FULL OUTER JOIN.
  • Jeśli istotne są tylko dopasowania: INNER JOIN.

Prawie nigdy nie wybiera się aktywnie RIGHT JOIN; zamiast tego przekształca się je w LEFT JOIN.

Przykład uzgadniania danych

Proszę wykorzystać FULL OUTER JOIN do oznaczenia statusu każdego wiersza. Wyrażenie CASE analizujące układ wartości NULL informuje, której strony brakuje — jest to klasyczne zapytanie audytowe.

SELECT
  COALESCE(o.id, p.order_id) AS ord,
  CASE
    WHEN p.id IS NULL THEN 'no payment'
    WHEN o.id IS NULL THEN 'orphan payment'
    ELSE 'matched'
  END AS status
FROM orders o
FULL OUTER JOIN payments p ON p.order_id = o.id;

Częste nieporozumienie

Kandydaci często sądzą, że FULL OUTER JOIN zwraca iloczyn kartezjański niedopasowanych wierszy. Tak nie jest. Niedopasowane wiersze z każdej strony pojawiają się dokładnie raz, połączone z wartościami NULL, i nigdy nie są wzajemnie mnożone.

Dopasowane wiersze nadal podlegają zwykłemu mnożeniu złączenia (jeden wiersz wynikowy na każdą pasującą parę) — obowiązuje tu ta sama zasada rozgałęziania co w przypadku dowolnego złączenia.

Szybkie sprawdzenie

Osoba prowadząca rozmowę prosi o przepisanie zapytania dla zespołu, który zabrania używania RIGHT JOIN.

Podsumowanie

RIGHT JOIN zachowuje prawą tabelę, a FULL OUTER JOIN zachowuje obie. Każde RIGHT JOIN można przepisać jako LEFT JOIN, zamieniając kolejność tabel, dlatego zespoły preferują LEFT JOIN.

  • FULL OUTER JOIN doskonale nadaje się do uzgadniania dwóch zbiorów danych.
  • MySQL nie obsługuje FULL OUTER JOIN; można je emulować za pomocą LEFT JOIN + RIGHT JOIN + UNION.
  • Złączenie należy wybrać, decydując, które niedopasowane wiersze mają zostać zachowane.
  • Niedopasowane wiersze pojawiają się raz z wartościami NULL, nigdy jako iloczyn kartezjański.

Często zadawane pytania

Czy lekcja „Semantyka RIGHT i FULL OUTER JOIN” jest bezpłatna?

Tak — pełny tekst „Semantyka RIGHT i FULL OUTER JOIN” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Interview Prep, przejdź na CoddyKit PRO. Kurs SQL Interview Prep zawiera 4 lekcji w sumie.

Co nauczysz się w „Semantyka RIGHT i FULL OUTER JOIN”?

Kiedy potrzebne jest każde z nich i jak przepisać RIGHT jako LEFT Ćwiczysz SQL Interview Prep z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć SQL Interview Prep?

Nie wymagamy żadnego doświadczenia. SQL Interview Prep w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Semantyka RIGHT i FULL OUTER JOIN”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji SQL Interview Prep?

Tak. Każda lekcja SQL Interview Prep zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. LEFT JOIN i zachowywanie niedopasowanych wierszy
  2. Semantyka RIGHT i FULL OUTER JOIN
  3. Znajdowanie wierszy bez dopasowania (anti-join)
  4. Pułapka WHERE w złączeniu zewnętrznym
← Powrót do SQL Interview Prep