Menu
CoddyTech

Samozłączenie

Część sekcji Podstawy ścieżki SQL w Coddy. Lekcja 46 z 72.

Samozłączenia to różne typy złączeń. Do tej pory omawialiśmy złączenia wielu tabel, ale samozłączenia łączą tę samą tabelę. Klasycznym przykładem może być tabela pracowników.

employee_idemployee_namemanager_id
1Minke2
2Temur3
3Tatjana4
4Marinela 

Każdy pracownik ma przełożonego z wyjątkiem najwyższego rangą przełożonego, a każdy przełożony jest również pracownikiem.

Problem: Chcemy poznać imię i nazwisko menedżera każdego pracownika.

SELECT e2.employee_id, e2.employee_name, e1.employee_name as manager_name
FROM employees as e1
JOIN employees as e2 ON e1.employee_id = e2.manager_id

Łączymy tę samą tabelę, ale za pierwszym razem nazywamy ją e1, a za drugim razem e2. Łączenie odbywa się między polami employee_id i manager_id.

Wynik:

employee_idemployee_namemanager_name
1MinkeTemur
2TemurTatjana
3TatjanaMarinela
challenge icon

Wyzwanie

Średni

Dostępne tabele i kolumny:

  • friends: id, name, friend_id

Znajdź pary znajomych, którzy są wzajemnie swoimi znajomymi (wzajemna znajomość istnieje, gdy friend_id osoby A wskazuje osobę B ORAZ friend_id osoby B wskazuje osobę A). Wyświetl imiona obu znajomych w jednym wierszu. Nazwij kolumny friend1 i friend2.

Uwaga: Uwzględnij w klauzuli WHERE kryterium f1.id < f2.id (f1 i f2 to aliasy dwóch kopii tabeli), aby nie uwzględniać zduplikowanych par 

Spróbuj swoich sił

-- Połącz tabelę z samą sobą, aby jeden wiersz mógł zawierać dwie różne osoby
SELECT ____ AS friend1, ____ AS friend2
FROM friends f1
JOIN friends f2 ON ____
-- Zachowaj tylko pary, w których obie osoby wskazują na siebie nawzajem
WHERE ____ AND f1.id < f2.id;
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Edytor online SQL