Menu
Coddy logo textTech

Hiyerarşi Üzerinde Gezinme

Coddy'nin SQL Journey'sinin Temellerin Ötesi bölümünün bir parçası. Ders 21 / 27.

Özyinelemeli CTE'lerin var olmasının asıl nedeni: tek bir tabloda saklanan üst/alt ilişkisi üzerinde gezinmek. employees tablosunda aynı tabloya geri işaret eden bir manager_id sütunu olduğunu varsayalım:

WITH RECURSIVE chain AS (
    SELECT id, name, manager_id
    FROM employees WHERE id = 7              -- çapa: başlangıç çalışanı
    UNION ALL
    SELECT e.id, e.name, e.manager_id
    FROM employees e
    JOIN chain c ON e.id = c.manager_id      -- özyinelemeli: yöneticiye atla
)
SELECT * FROM chain

Her adım, CTE’yi employees tablosuna yeniden birleştirerek ağaçta bir seviye yukarı çıkar. Bir row yöneticisi olmadığında (JOIN hiçbir şeyle eşleşmediğinde) özyineleme doğal olarak durur.

challenge icon

Görev

Orta

Kullanılabilir tablolar ve sütunlar:

  • categories: id, name, parent_id

Her kategorinin, başka bir kategoriye işaret eden isteğe bağlı bir parent_id değeri vardır. Kategori id = 1’in alt kategorileri, alt kategorilerinin alt kategorileri ve devamı olan tüm kategorileri döndürün; ancak 1. kategorinin kendisini döndürmeyin. id ve name değerlerini döndürün ve sonuçları id değerine göre sıralayın.

Kendin dene

WITH RECURSIVE descendants AS (
    -- anchor: id 1'in doğrudan çocukları
    -- recursive: onların çocukları, vb.
)
SELECT id, name FROM descendants ORDER BY id
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Temellerin Ötesi bölümündeki tüm dersler

Kendi başına pratik yap: SQL playground