Menu
Coddy logo textTech

Bir Sayı Dizisi

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

Bir alt sorguyu isimlendirmek için kullanılan ve CTE (Ortak Tablo İfadesi) olarak da bilinen WITH anahtar kelimesiyle Temeller bölümünde tanışmıştınız. Özyinelemeli (recursive) bir CTE bir adım daha ileri gider: alt sorgunun kendisine başvurmasına izin vererek sonucu satır satır oluşturur.

En basit sürüm, temel bir tablo olmadan bir sayı dizisi oluşturur. Şekil her zaman aynıdır:

WITH RECURSIVE counter(n) AS (
    SELECT 1                              -- anchor: başlangıç satırı
    UNION ALL
    SELECT n + 1 FROM counter WHERE n < 5 -- recursive: bir sonrakini bir öncekinden oluştur
)
SELECT n FROM counter

Şu şekilde okuyun: n = 1 ile başlayın, ardından her bir n değerinin önceki n + 1 olduğu satırları eklemeye devam edin ve WHERE eşleşmeyi bıraktığında durun. Sonuç: 1, 2, 3, 4, 5.

Gövdenin iki parçası UNION ALL ile birleştirilir. Birincisi anchor (çapa) kısmıdır: tohum satırlar. İkincisi ise recursive step (özyinelemeli adım) kısmıdır: CTE'nin kendisini sorgular.

challenge icon

Görev

Kolay

İki sütunlu, powers adında özyinelemeli (recursive) bir CTE yazın:

  • i: 1'den başlayan yineleme indeksi
  • p: 2'nin i. kuvveti (2, 4, 8, …)

p değeri 1000'i aştığında durun. Her iki sütunu da i değerine göre artan sırada döndürün.

Kopya kağıdı

Özyinelemeli bir CTE (recursive CTE), bir alt sorgunun kendisine başvurmasına izin vererek sonuçları satır satır oluşturur:

WITH RECURSIVE counter(n) AS (
    SELECT 1                               -- anchor: başlangıç satırı
    UNION ALL
    SELECT n + 1 FROM counter WHERE n < 5  -- özyinelemeli adım
)
SELECT n FROM counter
  • Anchor: tohum satır(lar) (ilk SELECT)
  • Özyinelemeli adım: bir sonraki satırı üretmek için CTE'nin kendisine sorgu gönderir
  • WHERE koşulu artık eşleşmediğinde durur
  • İki parça UNION ALL ile birleştirilir

Kendin dene

WITH RECURSIVE powers(i, p) AS (
    -- çapa: i=1, p=2
    -- özyinelemeli: i+1, p*2, p 1000'e ulaşana kadar
)
SELECT i, p FROM powers ORDER BY i
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