Baza wiedzy / SQL
Jak działa SELF JOIN w języku SQL? Przykłady zastosowania

Self join w SQL to jedno z ciekawszych podejść do pobierania danych z tej samej tabeli w taki sposób, jakbyśmy łączyli dwie osobne tabele. Brzmi trochę zagadkowo? Już wyjaśniam!
Czym jest SELF JOIN?
Self join to rodzaj operacji JOIN w SQL, gdzie tabela łączy się sama ze sobą. Możemy to sobie wyobrazić jako tworzenie dwóch instancji tej samej tabeli i ich połączenie na podstawie relacji między danymi. Aby to osiągnąć, korzystamy z aliasów tabel, dzięki czemu SQL wie, które instancje tabeli są wykorzystywane.
Przykład działania SELF JOIN
Rozważmy prostą tabelę Pracownicy, która zawiera kolumny:
- ID – unikalny identyfikator pracownika
- Imię – imię pracownika
- Rola – stanowisko
- ID_Szefa – identyfikator szefa danego pracownika
Nasza przykładowa tabela wygląda tak:
| ID | Imię | Rola | ID_Szefa |
|---|---|---|---|
| 1 | Jan | CEO | NULL |
| 2 | Alicja | Manager | 1 |
| 3 | Piotr | Developer | 2 |
Aby pobrać listę pracowników wraz z ich szefami, możemy użyć SELF JOIN-a:
SELECT
pracownik.Imię AS 'Pracownik',
szef.Imię AS 'Szef'
FROM Pracownicy AS pracownik
LEFT JOIN Pracownicy AS szef
ON pracownik.ID_Szefa = szef.ID;
Rezultatem zapytania będzie:
| Pracownik | Szef |
|---|---|
| Alicja | Jan |
| Piotr | Alicja |
Dlaczego warto znać SELF JOIN?
SELF JOIN to bardzo przydatne narzędzie w SQL, ponieważ pozwala:
- Pracować z relacjami hierarchicznymi (np. relacja pracownik-szef).
- Porównywać rekordy w ramach tej samej tabeli.
- Tworzyć analizy i raporty, np. listy zastępowanych i zastępujących pracowników.
Kiedy stosować SELF JOIN?
Oto kilka typowych sytuacji, gdy warto wykorzystać SELF JOIN:
- Struktury organizacyjne – np. lista pracowników i ich przełożonych.
- Porównywanie wartości – np. porównanie pensji pracowników względem siebie.
- Rekordy powiązane ze sobą – np. analiza klientów poleconych przez innych klientów.
Podsumowanie
Self join to potężne narzędzie w SQL, które pozwala na analizę powiązań w ramach jednej tabeli. Dzięki użyciu aliasów możemy łatwo manipulować hierarchicznymi danymi i wykonywać złożone operacje na rekordach. Mimo że może wydawać się skomplikowany, jego zastosowanie znacząco rozszerza możliwości analizy i raportowania w bazach danych.
