0Pricing
SQL Academy · Lekcja

Złączenia tabeli z samą sobą i aliasy

Łącz tabelę z samą sobą za pomocą aliasów, aby porównywać wiersze w obrębie tej samej tabeli (pracowników i przełożonych, daty i wcześniejsze daty).

Złączenia tabeli z samą sobą i aliasy to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 4 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 Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.

Self-join: łączenie tabeli z samą sobą

Czasami relacja występuje w obrębie jednej tabeli:

  • Pracownicy ↔ menedżerowie (menedżer jest pracownikiem)
  • Wątki komentarzy (każdy komentarz ma parent_id)
  • Graf znajomych (użytkownik ↔ użytkownik)

Konfiguracja

Tabela employees z kluczem obcym odwołującym się do tej samej tabeli:

CREATE TABLE employees (
  id BIGSERIAL PRIMARY KEY,
  full_name TEXT NOT NULL,
  manager_id BIGINT REFERENCES employees(id)
);

Łączenie pracowników z ich menedżerami

Każdej instancji należy nadać inny alias:

SELECT e.full_name AS employee, m.full_name AS manager
FROM employees e
JOIN employees m ON m.id = e.manager_id;

Bez aliasów kod się nie skompiluje

Bez aliasów nie można określić, o które full_name chodzi. Każde odwołanie jest niejednoznaczne:

-- ERROR: column reference "full_name" is ambiguous
SELECT full_name FROM employees JOIN employees ON ...

LEFT JOIN dla pracowników najwyższego szczebla

INNER JOIN pomija pracowników, którzy nie mają menedżera (np. dyrektora generalnego). Należy użyć LEFT JOIN, aby ich zachować:

SELECT e.full_name AS employee, m.full_name AS manager
FROM employees e
LEFT JOIN employees m ON m.id = e.manager_id;

Komentarze zagnieżdżone w wątkach

Wyświetlanie każdego komentarza wraz z treścią jego komentarza nadrzędnego:

SELECT c.id, c.body, p.body AS parent_body
FROM comments c
LEFT JOIN comments p ON p.id = c.parent_id;

Pary i kombinacje

Znajdowanie par produktów, które pojawiły się w tym samym zamówieniu (bez zduplikowanych par (A,B) i (B,A)):

SELECT a.id AS product_a, b.id AS product_b
FROM order_items a
JOIN order_items b
  ON a.order_id = b.order_id
 AND a.product_id < b.product_id;

Porównywanie sąsiednich wierszy

Self-join z poprzednią wersją wiersza:

SELECT a.id, a.created_at, b.created_at AS prev_at
FROM events a
LEFT JOIN events b ON b.id = a.previous_id;

Self-join a funkcja okna

W wielu zadaniach typu „porównaj każdy wiersz z poprzednim” funkcja okna (LAG) jest prostsza i szybsza niż self-join. Temat omówiono w lekcji Window Functions Deep Dive.

Rekurencyjne self-join

Trzeba przejść N poziomów w głąb (struktura organizacyjna, drzewo wątku)? Należy użyć rekurencyjnego CTE — temat omówiono w lekcji Subqueries and CTEs.

Indeksowanie kolumny klucza obcego

Zawsze należy dodać indeks na kolumnie klucza obcego odwołującego się do tej samej tabeli. Bez niego złączenie przeszukuje całą tabelę przy każdym wyszukiwaniu elementu nadrzędnego.

CREATE INDEX employees_manager_idx ON employees(manager_id);

Podsumowanie

Samozłączenia obsługują relacje wewnątrz jednej tabeli.

  • Dwa aliasy dla dwóch wirtualnych kopii
  • LEFT JOIN, aby zachować wiersze główne / najwyższego poziomu
  • Indeksowanie kolumny FK
  • Funkcje okna mogą uprościć wzorce typu „poprzedni wiersz”

Szybki test

Łączy Pan/Pani tabelę employees z nią samą, aby znaleźć przełożonego każdego pracownika. Dlaczego wymagane są aliasy?

Często zadawane pytania

Czy lekcja „Złączenia tabeli z samą sobą i aliasy” jest bezpłatna?

Tak — pełny tekst „Złączenia tabeli z samą sobą i aliasy” 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 Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Złączenia tabeli z samą sobą i aliasy”?

Łącz tabelę z samą sobą za pomocą aliasów, aby porównywać wiersze w obrębie tej samej tabeli (pracowników i przełożonych, daty i wcześniejsze daty). Ćwiczysz SQL Academy 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 Academy?

Nie wymagamy żadnego doświadczenia. SQL Academy 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 4 z 4.

Ile czasu zajmuje lekcja „Złączenia tabeli z samą sobą i aliasy”?

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 Academy?

Tak. Każda lekcja SQL Academy 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. Dlaczego używamy złączeń (powtórka z modelu relacyjnego)
  2. Mechanika INNER JOIN
  3. LEFT/RIGHT JOIN i złączenia OUTER
  4. Złączenia tabeli z samą sobą i aliasy
← Powrót do SQL Academy