Hiyerarşi sorgu
- SQL kursu
- İleri seviye
- Ders 9/81
- 4 dk
Üst-alt ilişkisini recursive CTE ile gez
Hiyerarşi sorgu
Recursive CTE ile yönetici-çalışan hiyerarşisini sorgularsın. Her kişi bir üst kişiye bağlıdır.
WITH RECURSIVE org AS (
SELECT id, name, manager_id, 1 AS level
FROM employees WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.name, e.manager_id, o.level + 1
FROM employees e JOIN org o ON e.manager_id = o.id
)
SELECT * FROM org;Bu sorgu organizasyon ağacını çıkarır.
WITH RECURSIVE ile org adında kendine başvuran geçici bir sonuç kümesi (CTE) tanımlanır; ardından gelen sorgu onu bir tablo gibi kullanır. org kaynağından tüm sütunlar seçilir.
Hiyerarşi sorgu — ayrıntı
Anchor en üst yöneticiyi, recursive her ast seviyesini ekler. level derinliği gösterir.
Anchor'da WHERE manager_id IS NULL ile yöneticisi olmayan kişi seçilir; recursive kısımda çalışanlar, yöneticisi bir önceki seviyede bulunanlarla JOIN edilir.
Uygulama Hiyerarşi sorgu
Bir organizasyon hiyerarşisi sorgusu yaz: yöneticisiz kişiyi anchor, astları recursive ekle.
Başlangıç kodu
-- hiyerarşi sorgu
WITH RECURSIVE org AS (
SELECT id, name, manager_id, 1 AS levelÖrnek çözüm
WITH RECURSIVE org AS (
SELECT id, name, manager_id, 1 AS level
FROM employees WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.name, e.manager_id, o.level + 1
FROM employees e JOIN org o ON e.manager_id = o.id
)
SELECT * FROM org;Beklenen çıktı
id name level 1 Fatma 1 2 Ayşe 2
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Hiyerarşi sorgu: kavramları eşleştir
| Kavram | Anlamı |
|---|---|
hiyerarşi |
ağaç |
yönetici |
üst |
ast |
alt |
level |
seviye |
2 level ekle
SELECT id, name, manager_id, 1 AS ____
SELECT id, name, manager_id, 1 AS level
Açıklama: Başlangıç (anchor) sorgusunda level 1 olarak başlar; her özyinelemede bir artırılır.
3 Hiyerarşi sorguda anchor ne seçer?
- En üst kişi Doğru cevap
- Tümü
- En alt kişi
- Yaprakları
Açıklama: Anchor en üst kişiyi seçer.