0Pricing
SQL Interview Prep · Ders

İlk CTE'nizi Yazma

Temel WITH söz dizimini ve bir CTE'nin okunabilirliği alt sorguya göre ne zaman artırdığını öğrenin.

İlk CTE'nizi Yazma, CoddyKit'te ücretsiz bir SQL Interview Prep dersidir. Bu, 4 dersinin 1. 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 Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Interview Prep kursu toplamda 4 dersten oluşur.

CTE Aslında Nedir

Ortak Tablo İfadesi (CTE), WITH anahtar sözcüğüyle tanımlanan ve yalnızca tek bir sorgunun süresi boyunca var olan adlandırılmış, geçici bir sonuç kümesidir. Görüşmeciler CTE'leri sever, çünkü mantığı açık biçimde yapılandırıp yapılandıramadığınızı gösterirler.

CTE'yi, bir alt sorguya ad vererek sonraki ana ifadede ona bir tablo gibi başvurabilmenizi sağlayan bir yapı olarak düşünün. Kalıcı bir nesne oluşturmaz ve sorgu biter bitmez ortadan kalkar.

Temel WITH Sözdizimi

Her CTE WITH, bir ad, AS anahtar sözcüğü ve parantez içine alınmış bir sorguyla başlar. Kapanış parantezinden sonra CTE'yi adıyla kullanan normal bir ifade yazarsınız.

  • WITH cte_name AS ( ... ) bloğu tanımlar.
  • Parantezden hemen sonraki sorgu ana sorgudur.
  • CTE adı, üzerinden SELECT yapabileceğiniz bir tablo gibi davranır.
WITH recent_orders AS (
    SELECT *
    FROM orders
    WHERE order_date >= '2024-01-01'
)
SELECT *
FROM recent_orders;

Neden Sadece Bir Alt Sorgu Kullanmayalım?

Aynı mantık FROM yan tümcesinde satır içi bir alt sorgu olarak da yazılabilir. Öyleyse görüşmeciler neden CTE'ler hakkında soru sorar?

  • Okunabilirlik: adlandırılmış bir adım, tarif gibi yukarıdan aşağıya okunur.
  • Yeniden kullanım: bir alt sorguyu tekrarlamak yerine aynı CTE'ye birden çok kez başvurabilirsiniz.
  • Hata ayıklanabilirlik: CTE'yi incelemek için yalnızca onu SELECT edebilirsiniz.

Bir görüşmedeki doğru yanıt genellikle şudur: sorgunun okunmasını ve bakımını kolaylaştırdığı zaman CTE kullanın.

Uygulamalı Örnek: Önce Filtreleme, Sonra Toplulaştırma

Diyelim ki soru şu: bu yıl verilen siparişlerden elde edilen toplam geliri bulun. CTE, filtreleme adımını ayırmanıza ve ardından adlandırılmış sonuç üzerinde toplulaştırma yapmanıza olanak tanır.

Ana sorgu recent_orders ifadesini gerçek bir tabloymuş gibi ele alır; bu da toplulaştırmayı temiz ve anlaşılır tutar.

WITH recent_orders AS (
    SELECT amount
    FROM orders
    WHERE order_date >= '2024-01-01'
)
SELECT SUM(amount) AS total_revenue
FROM recent_orders;

Çıktı Sütunlarını Adlandırma

CTE'nin dışa sunduğu sütunları, bunları CTE adının hemen ardından listeleyerek yeniden adlandırabilirsiniz. Bu, iç sorgu ifadeler ürettiğinde veya sonraki adımlarda daha anlaşılır adlar istediğinizde kullanışlıdır.

Bir sütun listesi sağlarsanız bu liste, iç sorgunun döndürdüğü sütun sayısıyla eşleşmelidir; aksi hâlde veritabanı bir hata verir.

WITH revenue (region, total) AS (
    SELECT region, SUM(amount)
    FROM orders
    GROUP BY region
)
SELECT region, total
FROM revenue
ORDER BY total DESC;

CTE Yalnızca Adlandırılmış Bir Sorgudur

Görüşmecileri etkileyen bir zihinsel model şudur: CTE, mantıksal olarak tanımının satır içine yerleştirilmesine denktir. Veritabanı onu satır içine yerleştirmeyi veya somutlaştırmayı seçebilir, ancak anlamsal olarak sonuç, alt sorguyu yapıştırmışsınız gibi aynıdır.

Bu, normal bir SELECT içinde yasal olan her şeyin CTE içinde de yasal olduğu anlamına gelir: birleştirmeler, GROUP BY, WHERE, pencere işlevleri ve daha fazlası.

Daha Derin Bir Örnek: JOIN İçeren CTE

Birleştirmenin bir tarafını önceden biçimlendirmeniz gerektiğinde CTE'ler özellikle kullanışlıdır. Burada önce müşteri başına sipariş sayısını oluşturuyor, ardından bunu müşteriler tablosuyla yeniden birleştirerek her müşteri satırının toplamını içermesini sağlıyoruz.

Ana sorgunun neredeyse İngilizce gibi okunmasına dikkat edin: müşterilerden başlayıp sipariş sayılarını birleştirin.

WITH order_counts AS (
    SELECT customer_id, COUNT(*) AS num_orders
    FROM orders
    GROUP BY customer_id
)
SELECT c.name, oc.num_orders
FROM customers c
JOIN order_counts oc
    ON oc.customer_id = c.id;

CTE Sorguda Nerede Yer Alır

WITH bloğu, onu kullanan ifadeden önce gelmelidir. CTE, tanımının hemen ardından gelen tek ifade tarafından görülebilir.

  • CTE'ye daha sonraki, ayrı bir sorguda başvuramazsınız.
  • Bir SELECT için tanımlanan CTE, daha sonra çalıştırılan başka bir SELECT tarafından yeniden kullanılamaz.
  • Kapsam, ifadeyi sonlandıran noktalı virgülle sona erer.

CTE'ler INSERT, UPDATE, DELETE ile Çalışır

Sık sorulan bir devam sorusu şudur: CTE'ler yalnızca SELECT ile sınırlı değildir. Çoğu modern veritabanında veri değiştirme ifadelerine de bir WITH yan tümcesi ekleyebilirsiniz.

Bu, bir satır kümesini bir kez hesaplayıp üzerinde işlem yapmanıza olanak tanır; bu yaklaşım, WHERE yan tümcesinin içindeki iç içe bir alt sorgudan çok daha anlaşılırdır.

WITH stale AS (
    SELECT id
    FROM sessions
    WHERE last_seen < NOW() - INTERVAL '30 days'
)
DELETE FROM sessions
WHERE id IN (SELECT id FROM stale);

Yaygın Başlangıç Hataları

Görüşmeciler şu hatalara dikkat eder:

  • CTE'den sonra ana sorguyu unutmak; tek başına bir WITH bloğu tam bir ifade değildir.
  • CTE ile ana sorgunun arasına noktalı virgül koymak.
  • CTE'nin birden fazla ifade boyunca kalıcı olmasını beklemek.
  • İsteğe bağlı sütun adı listesini iç sorgunun sütunlarıyla eşleştirememek.

Bir Görüşmede CTE'lerden Nasıl Söz Edilir

Dağınık bir alt sorguyu yeniden düzenlemeniz istendiğinde düşüncenizi açıklayın: Bu filtreleme alt sorgusunu recent_orders adlı bir CTE'ye taşıyacağım; böylece toplulaştırma temiz okunacak.

CTE'leri körü körüne değil, açıklık ve yeniden kullanım için seçtiğinizi göstermek, orta seviye olgunluğa işaret eder. Bir CTE'nin bir sorguyu kendiliğinden hızlandırmadığını; asıl değerinin okunabilirlik olduğunu belirtin.

Hızlı Kontrol

Temel CTE sözdizimi ve kapsam bilginizi sınayın.

Özet: İlk CTE'niz

Bir CTE'nin, geçici bir sonuç kümesine ad vermek için WITH name AS ( ... ) kullandığını ve ardından gelen ifadede bu kümeye tablo gibi başvurduğunu öğrendiniz.

  • CTE'ler, satır içi alt sorgulara kıyasla okunabilirliği, yeniden kullanımı ve hata ayıklanabilirliği artırır.
  • Kapsamları tek bir ifadeyle sınırlıdır; sonrasında ortadan kalkarlar.
  • SELECT ile ve INSERT/UPDATE/DELETE ile de çalışırlar.
  • Performansı kendiliğinden artırmazlar.

Sırada: birkaç CTE'yi bir işlem hattında birbirine bağlamak var.

Sıkça Sorulan Sorular

“İlk CTE'nizi Yazma” dersi ücretsiz mi?

Evet — “İlk CTE'nizi Yazma” 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 Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Interview Prep kursu toplamda 4 dersten oluşur.

“İlk CTE'nizi Yazma” dersinde ne öğreneceğim?

Temel WITH söz dizimini ve bir CTE'nin okunabilirliği alt sorguya göre ne zaman artırdığını öğrenin. SQL Interview Prep 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 Interview Prep öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te SQL Interview Prep, 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 1. dersidir.

“İlk CTE'nizi Yazma” 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 Interview Prep dersinde kod yazıp çalıştırabilir miyim?

Evet. Her SQL Interview Prep 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. İlk CTE'nizi Yazma
  2. Birden Çok CTE'yi Zincirleme
  3. CTE, Alt Sorgu ve Geçici Tablo Karşılaştırması
  4. İç İçe Sorguları CTE'lere Dönüştürme
← SQL Interview Prep Sayfasına Dön