Seriler ve Diziler Oluşturma
Özyinelemeyle satırlar oluşturun.
Seriler ve Diziler Oluşturma, CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, SQL Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Academy kursu toplamda 4 dersten oluşur.
Üretilmiş Seri Nedir?
Bazen herhangi bir tabloda bulunmayan sayıların, tarihlerin veya diğer ardışık değerlerin bir listesine ihtiyaç duyarsınız. SQL, özyineleme veya yerleşik işlevler kullanarak bunları anında oluşturmanıza olanak tanır.
Bu derste, bir sorgunun kendi çıktısına başvurmasını sağlayan güçlü bir araç olan WITH RECURSIVE kullanarak dizileri nasıl oluşturacağınızı öğreneceksiniz.
İlk Özyinelemeli CTE
Özyinelemeli CTE (Ortak Tablo İfadesi), UNION ALL ile birleştirilen iki bölümden oluşur: ilk satırı üreten temel durum ve bir sonraki satırı üretmek için CTE'nin kendisine başvuran özyinelemeli adım.
Özyinelemeli adım hiç satır döndürmediğinde özyineleme durur.
WITH RECURSIVE counter(n) AS (
SELECT 1
UNION ALL
SELECT n + 1 FROM counter WHERE n < 5
)
SELECT n FROM counter;Özyinelemenin Açılması
Her adımı ayrı ayrı düşünmek yararlı olur. Temel durum tabloyu başlangıç değerleriyle doldurur, ardından WHERE koşulu başarısız olana kadar her özyinelemeli geçiş bir satır daha ekler.
WHERE n < 5 sorgusu için motor 1, 2, 3, 4 ve 5 satırlarını üretir, ardından 5 < 5 yanlış olduğu için durur.
WITH RECURSIVE steps(n, note) AS (
SELECT 1, 'base case'
UNION ALL
SELECT n + 1, 'recursive step'
FROM steps
WHERE n < 4
)
SELECT n, note FROM steps;Çift Sayılar Üretme
Özyinelemeli bölümde 1'den büyük bir değer ekleyerek adım büyüklüğünü kolayca değiştirebilirsiniz. Bu işlem, 2 ile 10 arasındaki tüm çift sayıları üretir.
Kalıp her zaman şöyledir: sonraki_değer = mevcut_değer + adım.
WITH RECURSIVE evens(n) AS (
SELECT 2
UNION ALL
SELECT n + 2 FROM evens WHERE n < 10
)
SELECT n FROM evens;Geriye Doğru Sayma
Özyineleme yalnızca ileriye doğru saymakla sınırlı değildir. Toplama yerine çıkarma yaptığınızda azalan bir dizi elde edersiniz. Sonsuz döngüden kaçınmak için durma koşulunda > yerine < kullanıldığından emin olun.
WITH RECURSIVE countdown(n) AS (
SELECT 10
UNION ALL
SELECT n - 1 FROM countdown WHERE n > 1
)
SELECT n FROM countdown;Tarih Aralığı Üretme
Özyinelemeli CTE'lerin en pratik kullanım alanlarından biri bir tarih serisi oluşturmaktır. Belirli bir tarihten başlar ve bir bitiş tarihine ulaşana kadar her seferinde bir gün eklersiniz.
Bu yaklaşım, raporlardaki boşlukları doldurmak için özellikle yararlıdır — o gün için veri olmasa bile her tarih görünür.
WITH RECURSIVE dates(d) AS (
SELECT DATE '2024-01-01'
UNION ALL
SELECT d + INTERVAL '1 day'
FROM dates
WHERE d < DATE '2024-01-07'
)
SELECT d FROM dates;Tarih Serisiyle Rapor Boşluklarını Doldurma
Yalnızca satış gerçekleşen günlerde satırları bulunan bir sales tablosu olduğunu düşünün. Üretilmiş bir tarih serisini LEFT JOIN ile satış tablosuna birleştirerek aralıktaki her günü elde edersiniz; satış olmayan günlerde değer NULL olur.
WITH RECURSIVE cal(d) AS (
SELECT DATE '2024-03-01'
UNION ALL
SELECT d + INTERVAL '1 day' FROM cal WHERE d < DATE '2024-03-05'
),
sales(sale_date, amount) AS (
VALUES
(DATE '2024-03-01', 100),
(DATE '2024-03-03', 250),
(DATE '2024-03-05', 180)
)
SELECT cal.d, COALESCE(sales.amount, 0) AS amount
FROM cal
LEFT JOIN sales ON cal.d = sales.sale_date
ORDER BY cal.d;Çarpım Tablosu Üretme
Özyinelemeli CTE'ler birden çok sütun taşıyabilir; bu da daha zengin çıktılar oluşturmanıza olanak tanır. Burada hem satır dizini hem de hesaplanan değer aynı anda izlenir.
WITH RECURSIVE mult(n, result) AS (
SELECT 1, 1 * 7
UNION ALL
SELECT n + 1, (n + 1) * 7
FROM mult
WHERE n < 10
)
SELECT n, result AS seven_times_n FROM mult;Fibonacci Sayıları
Fibonacci, her sayının kendisinden önceki iki sayının toplamı olduğu klasik bir dizidir: 0, 1, 1, 2, 3, 5, 8 …
Özyinelemeli bir CTE, geçerli a değerini ve sonraki b değerini birlikte izler ve her adımda bunların yerini değiştirir.
WITH RECURSIVE fib(a, b) AS (
SELECT 0, 1
UNION ALL
SELECT b, a + b FROM fib WHERE a < 100
)
SELECT a AS fibonacci FROM fib;PostgreSQL'de generate_series Kullanımı
PostgreSQL, özyinelemeli bir CTE yazmaya gerek kalmadan diziler üreten generate_series() adlı yerleşik bir kısayol sunar. Bu işlev bir başlangıç, bir bitiş ve isteğe bağlı bir adım kabul eder.
PostgreSQL'de sayı veya tarih aralıkları üretmenin en kısa yolu budur.
SELECT gs AS num
FROM generate_series(1, 10, 2) AS gs;Aylık Aralıklar Üretme
Aylık bir takvim oluşturmak için '1 month' aralığını generate_series() işlevine geçirin. Bu, aylık rapor başlıkları oluşturmak veya hangi aylarda veri bulunmadığını denetlemek için idealdir.
SELECT gs::DATE AS month_start
FROM generate_series(
'2024-01-01'::DATE,
'2024-06-01'::DATE,
INTERVAL '1 month'
) AS gs;Bilgi Kontrolü
Özyinelemeli CTE'lerle seri üretmeyi ne kadar anladığınızı sınayın.
Özet: Seri ve Dizi Üretme
Bu derste, herhangi bir kaynak tablo olmadan sayı ve tarih dizilerini nasıl üreteceğinizi öğrendiniz:
- WITH RECURSIVE — UNION ALL ile birleştirilen temel durum ve özyinelemeli adım; özyinelemeli adım hiç satır döndürmediğinde durur.
- Esnek adım büyüklüğü — ileriye veya geriye doğru saymak ya da değerleri atlamak için herhangi bir değeri ekleyin veya çıkarın.
- Tarih aralıkları — günlük, aylık veya özel takvim serileri üretmek için bir aralık ekleyin.
- Çok sütunlu CTE'ler — Fibonacci gibi daha zengin çıktılar için yinelemeler arasında ek durumu taşıyın.
- generate_series() — en kısa sayı ve tarih dizilerini üretmek için PostgreSQL'in yerleşik işlevi.
Üretilmiş seriler, raporlardaki boşlukları doldurmak, deneme verileri oluşturmak ve verilerin içeriğinden bağımsız olarak eksiksiz bir değer aralığına ihtiyaç duyduğunuz her durum için gereklidir.
Sıkça Sorulan Sorular
“Seriler ve Diziler Oluşturma” dersi ücretsiz mi?
Evet — “Seriler ve Diziler Oluşturma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve SQL Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Academy kursu toplamda 4 dersten oluşur.
“Seriler ve Diziler Oluşturma” dersinde ne öğreneceğim?
Özyinelemeyle satırlar oluşturun. SQL Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
SQL Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te SQL Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Seriler ve Diziler Oluşturma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu SQL Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her SQL Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Özyinelemeli CTE'ler Nasıl Çalışır
- Kategori Ağacında İlerleme
- Seriler ve Diziler Oluşturma
- Sonsuz Döngülerden Kaçınma