Używamy cookies, żeby zwiększyć Twoje doświadczenia na stronie
CodeWorlds

Self-join i INNER kontra LEFT

Zanim zejdziemy z mostu, poznasz dwie subtelności łączenia regałów: różnicę między

INNER
a
LEFT
w praktyce oraz sztuczkę zwaną self-join.

INNER kontra LEFT - na jednym przykładzie

Wyobraź sobie czytelnika, który dopiero co się zapisał i nic nie wypożyczył.

  • INNER JOIN
    czytelnicy
    z
    wypozyczenia
    - taki czytelnik zniknie, bo nie ma pary.
  • LEFT JOIN
    czytelnicy
    z
    wypozyczenia
    - taki czytelnik zostanie, a data wypożyczenia będzie NULL.

| | INNER JOIN | LEFT JOIN | |---|------------|-----------| | Wiersze bez pary | znikają | zostają (z NULL) | | Kiedy użyć | tylko kompletne pary | wszystkie wiersze z lewej |

To jedyna, ale za to fundamentalna różnica między tymi dwoma mostami.

Self-join - regał spięty ze sobą

Czasem tabelę łączymy samą ze sobą (self-join). Nadajemy jej wtedy dwa różne aliasy, jakby to były dwa osobne regały:

1SELECT a1.nazwisko, a2.nazwisko
2FROM autorzy a1
3INNER JOIN autorzy a2 ON a1.kraj = a2.kraj;

To zapytanie zestawia ze sobą pary autorów z tego samego kraju. Aliasy

a1
i
a2
to dwa "egzemplarze" tej samej tabeli
autorzy
- dzięki nim MySQL wie, o który wiersz chodzi w warunku
ON
i w
SELECT
.

Self-join przydaje się wszędzie tam, gdzie porównujemy wiersze w obrębie jednej tabeli - na przykład autorów z tego samego kraju albo książki wydane w tym samym roku. To zaawansowana, ale potężna sztuczka mostowa.

Przejdź do CodeWorlds