0Pricing
SQL Academy · Ders

Ortak Tablo İfadeleri (WITH)

İç içe sorguları okunabilir WITH ifadelerine dönüştürün, CTE'leri zincirleyin ve PostgreSQL 12+ sürümündeki somutlaştırma kurallarını öğrenin.

Ortak Tablo İfadeleri (WITH), 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.

CTE Nedir?

Ortak Tablo İfadesi (CTE), WITH ile tanımlanan adlandırılmış bir alt sorgudur:

WITH paid_orders AS (
  SELECT * FROM orders WHERE status = 'paid'
)
SELECT user_id, COUNT(*)
FROM paid_orders
GROUP BY user_id;

CTE'ler Neden Kullanılır?

Üç önemli avantajı vardır:

  • Okunabilirlik — 200 satırlık bir sorguyu adlandırılmış adımlara bölmenizi sağlar
  • Yeniden kullanım — aynı ara sonucu birden çok kez kullanmanızı sağlar
  • Özyineleme — yalnızca CTE'ler özyinelemeli sorguları destekler (sonraki ders)

CTE'leri Zincirleme

Tek bir WITH içinde birden çok CTE tanımlayabilir ve birini sonraki CTE'de kullanabilirsiniz:

WITH last_30 AS (
  SELECT * FROM orders WHERE created_at >= NOW() - INTERVAL '30 days'
),
per_user AS (
  SELECT user_id, SUM(total) AS revenue FROM last_30 GROUP BY user_id
)
SELECT u.email, p.revenue
FROM users u
JOIN per_user p ON p.user_id = u.id
ORDER BY p.revenue DESC LIMIT 20;

Bir CTE'yi Yeniden Kullanma

Aynı ara sonuç iki kez kullanılıyorsa, CTE niyeti açıkça ortaya koyar:

WITH recent_users AS (
  SELECT id FROM users WHERE created_at >= NOW() - INTERVAL '7 days'
)
SELECT 'new orders'  AS metric, COUNT(*) FROM orders
  WHERE user_id IN (SELECT id FROM recent_users)
UNION ALL
SELECT 'new revenue', SUM(total) FROM orders
  WHERE user_id IN (SELECT id FROM recent_users);

CTE'nin Gerçekleştirilmesi (PostgreSQL ≤ 11)

Daha eski PG sürümleri, CTE çıktısını her zaman gerçekleştirirdi — bu da bir planlayıcı engeli oluştururdu. PG 12'den itibaren planlayıcı, aksini belirtmediğiniz sürece CTE'leri varsayılan olarak sorgunun içine yerleştirir:

-- Force the old materialise behaviour (rarely needed):
WITH x AS MATERIALIZED (SELECT ...) ...

-- Force inlining (default):
WITH x AS NOT MATERIALIZED (SELECT ...) ...

Veri Değiştiren CTE'ler

CTE'ler INSERT/UPDATE/DELETE kullanabilir — satırları tablolar arasında atomik olarak taşımak için kullanışlıdır:

WITH moved AS (
  DELETE FROM orders WHERE status = 'archived' RETURNING *
)
INSERT INTO orders_archive SELECT * FROM moved;

DML'de CTE'ler

"Bul ve işlem yap" için RETURNING + WITH:

WITH cancelled AS (
  UPDATE orders SET status = 'cancelled'
  WHERE created_at < NOW() - INTERVAL '14 days'
    AND status = 'pending'
  RETURNING id
)
INSERT INTO audit_log (event, order_id)
SELECT 'auto-cancel', id FROM cancelled;

Çalıştırma Sırası

Veri değiştiren CTE'ler aynı anlık görüntüde bağımsız olarak çalışır. Her ifade, tüm değişiklikler başlamadan ÖNCEKİ durumu görür — şaşırtıcıdır ama öngörülebilirdir.

CTE'ler, Alt Sorgular ve Görünümler

Karşılaştırma:

  • Alt sorgu — sorgunun içinde tanımlanır; tek kez kullanılır
  • CTE — adlandırılır; sorgu içinde birden çok kez kullanılır; sorgu sona erdikten sonra ortadan kalkar
  • Görünüm — adlandırılır; kalıcıdır; sorgular arasında yeniden kullanılabilir

CTE'leri Gereğinden Fazla Kullanmayın

Her şeyi bir CTE'ye sarmak sorguları okunabilir kılar, ancak maliyeti gizleyebilir. Çok büyük ara sonuçlarda planlayıcı, eşdeğer bir JOIN işlemine göre daha kötü planlar seçebilir.

Özet

CTE'ler ara sorguları adlandırır.

  • Okunabilirliği artırır
  • Tek bir sorgu içinde yeniden kullanımı sağlar
  • Özyineleme için gereklidir
  • Modern PG sürümlerinde varsayılan olarak sorgunun içine yerleştirilir

Kısa Kontrol

Ortak Tablo İfadesini hangi anahtar sözcük başlatır?

Sıkça Sorulan Sorular

“Ortak Tablo İfadeleri (WITH)” dersi ücretsiz mi?

Evet — “Ortak Tablo İfadeleri (WITH)” 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.

“Ortak Tablo İfadeleri (WITH)” dersinde ne öğreneceğim?

İç içe sorguları okunabilir WITH ifadelerine dönüştürün, CTE'leri zincirleyin ve PostgreSQL 12+ sürümündeki somutlaştırma kurallarını öğrenin. 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.

“Ortak Tablo İfadeleri (WITH)” 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

  1. Skaler, Satır ve Tablo Alt Sorguları
  2. İlişkili ve İlişkisiz Alt Sorgular
  3. Ortak Tablo İfadeleri (WITH)
  4. Hiyerarşiler için Özyinelemeli CTE'ler
← SQL Academy Sayfasına Dön