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.
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.
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.
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.
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.
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.
Wklej to do psql lub dowolnego edytora SQL dla Postgres, aby odtworzyć przykładowe tabele, a potem uruchom zapytania z demo.
Zamówienie 104 celowo wskazuje na klienta 9, który nie istnieje, aby złączenia zewnętrzne miały co pokazać.
LEFT JOIN zostawia Cleo z kolumnami zamówienia równymi NULL, a filtr IS NULL zostawia tylko te wiersze.
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