Złączenia SQL (JOIN) wyjaśnione na żywych przykładach

Złączenia SQL wyjaśnione

Złączenia SQL: Inner, Left, Right, Full, Cross, Self | We.Inc

Uruchom każde złączenie SQL na dwóch małych przykładowych tabelach bezpośrednio w przeglądarce i zobacz, które wiersze zostają, ze składnią PostgreSQL dla INNER, LEFT, RIGHT, FULL, CROSS i self join.

Złączenie łączy wiersze z dwóch tabel na podstawie warunku, zwykle pasujących kluczy. INNER JOIN zostawia tylko wiersze pasujące po obu stronach. LEFT JOIN zostawia każdy wiersz z lewej tabeli i wypełnia brakujące kolumny prawej wartością NULL, RIGHT JOIN robi odwrotnie, FULL JOIN zostawia obie strony, a CROSS JOIN łączy każdy wiersz z każdym.

Które wiersze zostawia każde złączenie

Diagramy Venna to typowy sposób nauki złączeń, ale ukrywają to, co naprawdę boli: zduplikowane wiersze i wartości NULL. Poniżej są dwie malutkie tabele, customers i orders, z klientem, który nigdy nic nie zamówił, i zamówieniem, którego klient został usunięty. Wybierz złączenie, a wynik zostanie obliczony w Twojej przeglądarce, więc zobaczysz dokładnie, które wiersze się pojawiają i dlaczego.

Najczęściej zadawane pytania

Czym różni się INNER JOIN od LEFT JOIN?

INNER JOIN odrzuca wiersze bez dopasowania. LEFT JOIN zostawia każdy wiersz pierwszej tabeli i wstawia NULL w kolumny drugiej tabeli, gdy nic nie pasuje. W demo Cleo pojawia się w LEFT JOIN z pustym zamówieniem, a w INNER JOIN jej nie ma.

Czy JOIN to to samo co INNER JOIN?

Tak. W PostgreSQL słowo INNER jest opcjonalne, a samo JOIN to inner join. Słowo OUTER również jest opcjonalne, więc LEFT JOIN i LEFT OUTER JOIN znaczą to samo.

Dlaczego moje złączenie zwróciło więcej wierszy, niż ma tabela?

Każdy lewy wiersz pojawia się raz na każdy pasujący prawy wiersz. Klient z trzema zamówieniami pojawi się trzy razy. To poprawne zachowanie; jeśli potrzebujesz jednego wiersza na klienta, agreguj przez GROUP BY lub złącz z wcześniej pogrupowanym podzapytaniem.

Czym jest self join?

To tabela złączona sama ze sobą pod dwoma aliasami, używana, gdy wiersze wskazują na inne wiersze w tej samej tabeli, na przykład pracowników i ich przełożonych albo klientów i osoby, które ich poleciły.

Czy MySQL obsługuje FULL OUTER JOIN?

PostgreSQL tak i to jego składnia jest tu pokazana. MySQL nie ma słowa kluczowego FULL JOIN; typowe obejście to LEFT JOIN połączony z RIGHT JOIN przez UNION.

ON, USING i NATURAL

Filtry złączeń zewnętrznych działają w innej kolejności

Wypróbuj w PostgreSQL

Wklej to do psql lub dowolnego edytora SQL dla Postgres, aby odtworzyć przykładowe tabele, a potem uruchom zapytania z demo.

Przykładowe tabele

Zamówienie 104 celowo wskazuje na klienta 9, który nie istnieje, aby złączenia zewnętrzne miały co pokazać.

Klienci, którzy nigdy nic nie zamówili

LEFT JOIN zostawia Cleo z kolumnami zamówienia równymi NULL, a filtr IS NULL zostawia tylko te wiersze.

Plac zabaw złączeń

Przykładowe tabele użyte w demo

Typ złączenia

Wynik: wiersze: {n}

Podświetlone komórki zostały uzupełnione wartością NULL przez złączenie zewnętrzne.

SELF

Zacznij za darmo · Bez karty kredytowej

Powiązane: Poradniki

Produkt

Dla kogo

Funkcje

Zasoby

Firma

Mapa strony