0Pricing
Coding Interview Prep · Ders

İç İçe Sorguları CTE'lere Dönüştürme

Canlı mülakatlarda kullanılan bir örüntüyle okunamayan iç içe sorguyu adım adım CTE'lere dönüştürün.

İç İçe Sorguları CTE'lere Dönüştürme, CoddyKit'te ücretsiz bir Coding Interview Prep dersidir. Bu, 4 dersinin 4. 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, Coding Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Coding Interview Prep kursu toplamda 4 dersten oluşur.

Canlı Mülakatta Yeniden Düzenleme

Orta seviye mülakatlarda sık sorulan bir görev şudur: İşte bir sorgu; bunu okunabilir hale getirin. Mülakat yapan kişi size derin biçimde iç içe yerleştirilmiş bir SELECT verir ve onu nasıl parçalara ayırdığınızı izler. İç içeliği adlandırılmış CTE'lerden oluşan bir diziye dönüştürmek en temiz çözümdür.

Bu ders, beyaz tahta başında bunu sakinlikle yapabilmeniz için gereken adımları tam olarak ele alır.

En İçteki Sorguyla Başlayın

İç içe alt sorgular kavramsal olarak içeriden dışarıya doğru yürütülür. Bu nedenle sorguyu siz de içeriden dışarıya doğru okuyun: Önce parantez içine alınmış en içteki SELECT'i bulun; bu, işlem hattınızın ilk aşamasıdır.

Ona açıklayıcı bir ad verin ve bir CTE'ye taşıyın. Bu iç bloğa başvuran her bölüm artık onun yerine CTE adına başvurur.

SELECT *
FROM (
    SELECT customer_id, SUM(amount) AS total
    FROM orders
    GROUP BY customer_id
) t
WHERE t.total > 1000;

Bir Düzeyi CTE'ye Taşıyın

En içteki türetilmiş tabloyu alın ve bir CTE'ye dönüştürün. Dış sorgu, artık adlandırılmış CTE'den SELECT yapması dışında aynı kalır.

Bu tek hamle, zihinsel iç içelik düzeylerinden birini ortadan kaldırır ve adıma anlamlı bir ad verir.

WITH spend AS (
    SELECT customer_id, SUM(amount) AS total
    FROM orders
    GROUP BY customer_id
)
SELECT *
FROM spend
WHERE total > 1000;

Gerçekten İç İçe Bir Örnek

Yeniden düzenlenmesi daha zor bir örnek şöyledir: iki iç içelik düzeyi ve korelasyonlu alt sorgu tarzında bir filtre. Amaç, en yüksek harcama grubundaki müşterilerin ortalama sipariş tutarını bulmaktır.

Sorgu doğrudur ancak okunması zordur. Onu aşama aşama ayıracağız.

SELECT AVG(o.amount) AS avg_order
FROM orders o
WHERE o.customer_id IN (
    SELECT customer_id
    FROM (
        SELECT customer_id, SUM(amount) AS total
        FROM orders
        GROUP BY customer_id
    ) s
    WHERE s.total > 1000
);

İlk Aşamayı Adlandırın

En içteki blok, müşteri başına toplam harcamayı hesaplar. Onu spend adlı bir CTE'ye taşıyın. Artık orta katman yalnızca bu CTE'yi filtreler.

Her çıkarma işleminin iç içelik derinliğini bir azalttığına ve kendini açıklayan bir ad eklediğine dikkat edin.

WITH spend AS (
    SELECT customer_id, SUM(amount) AS total
    FROM orders
    GROUP BY customer_id
)
SELECT AVG(o.amount) AS avg_order
FROM orders o
WHERE o.customer_id IN (
    SELECT customer_id FROM spend WHERE total > 1000
);

İkinci Aşamayı Adlandırın

spend üzerindeki filtreyi kendi CTE'si olan big_spenders'a çıkarın. Geriye kalan ana sorgu, açıkça adlandırılmış bir kümeye karşı düz bir birleştirmeye veya üyelik kontrolüne dönüşür.

Artık her aşamanın tek bir sorumluluğu vardır; bu, temiz SQL'in ayırt edici özelliğidir.

WITH spend AS (
    SELECT customer_id, SUM(amount) AS total
    FROM orders GROUP BY customer_id
),
big_spenders AS (
    SELECT customer_id FROM spend WHERE total > 1000
)
SELECT AVG(o.amount) AS avg_order
FROM orders o
JOIN big_spenders b ON b.customer_id = o.customer_id;

Yeniden Düzenlerken Anlamı Koruyun

Altın kural şudur: Yeniden düzenleme sonuçları değiştirmemelidir. Çıktıyı fark ettirmeden değiştirebilecek tuzaklara dikkat edin:

  • IN ifadesini JOIN ile değiştirmek, sağ taraf benzersiz değilse yinelenen satırlar oluşturabilir.
  • NOT IN boş değerlerle kullanıldığında NOT EXISTS'ten farklı davranır.
  • Toplulaştırma düzeyi aynı kalmalıdır.

Özenli olduğunuzu göstermek için bu riskleri açıkça dile getirin.

Yeniden Düzenlemeyi Doğrulama

Yeniden düzenlemenin aslına sadık olduğunu nasıl kanıtlarsınız? Her iki sürümü çalıştırıp satır sayılarını ve bir sağlama toplamını karşılaştıracağınızı ya da bir örnek üzerindeki sonuç kümelerini karşılaştıracağınızı belirtin.

Bir görüşmede, “Sayıları ve birkaç örnek satırı karşılaştırarak doğrulardım” demeniz bile yalnızca sözdizimini yeniden yazmanın ötesinde bir mühendislik disiplini sergiler.

SELECT COUNT(*), SUM(amount)
FROM orders
WHERE customer_id IN (SELECT customer_id FROM big_spenders);

Ne Zaman Yeniden Düzenleme Yapılmamalı

Yeniden düzenleme her zaman bir iyileştirme değildir. Tek ve sığ bir alt sorguyu olduğu gibi bırakmak daha açık olabilir; çok sayıda küçük CTE'ye aşırı bölmek de okunabilirliği zedeleyebilir.

Duruma göre karar verin: İç içe yapı amacı belirsizleştirdiğinde veya mantık yeniden kullanıldığında yeniden düzenleme yapın. Görüşmeciye, sorgu yukarıdan aşağıya doğru adlandırılmış ve birbirinden ayrılmış adımlar hâlinde okunmaya başladığında duracağınızı söyleyin.

Yeniden Düzenleme Kontrol Listesi

Tekrarlanabilir bir yöntemi şöyle aktarın:

  • En derindeki alt sorguyu bulmak için içten dışa okuyun.
  • Onu adı verilmiş bir CTE'ye çıkarın.
  • Yukarı doğru, her seferinde bir katman olmak üzere tekrarlayın.
  • Her aşamayı ürettiği şeye göre adlandırın.
  • Sonuçların değişmediğini doğrulayın (IN/JOIN ve NULL tuzaklarına dikkat edin).

Bu yaklaşım, korkutucu bir iç içe sorguyu sakin ve adım adım yapılan bir yeniden yazıma dönüştürür.

Yeniden Düzenlemenizi Anlatma

Çalışırken konuşun: En içteki blok müşteri başına harcamayı hesaplıyor; bu nedenle adını harcama koyacağım. Sonraki katman yüksek harcama yapanları filtreliyor. Ardından dış sorgu, onların sipariş tutarlarının ortalamasını hesaplıyor.

Görüşmeciler iletişimi doğruluk kadar önemser. Aşamaları anlatarak yapılan bir yeniden düzenleme, aradıkları orta düzey olgunluğu tam olarak gösterir.

Hızlı Kontrol

Derin biçimde iç içe geçmiş bir sorguyu CTE'lere dönüştürürken atılacak doğru ilk adımı belirleyin.

Özet: CTE'lerle Yeniden Düzenleme

Sakin ve tekrarlanabilir bir yeniden düzenleme süreci öğrendiniz: içten dışa okuyun, en derindeki alt sorguyu adı verilmiş bir CTE'ye çıkarın ve her seferinde bir katman olmak üzere dışa doğru ilerleyin.

  • Her aşamayı ürettiği şeye göre adlandırın.
  • Anlamı koruyun; IN ile JOIN arasındaki yinelenen satırlara ve NULL tuzaklarına dikkat edin.
  • Satır sayılarını ve örnek satırları karşılaştırarak doğrulayın.
  • Aşırı bölmeyin; sorgu açık ve adlandırılmış adımlar hâlinde okunmaya başladığında durun.

CTE kursu böylece tamamlanıyor; artık canlı bir görüşmede güvenle yeniden düzenleme yapabilirsiniz.

Sıkça Sorulan Sorular

“İç İçe Sorguları CTE'lere Dönüştürme” dersi ücretsiz mi?

Evet — “İç İçe Sorguları CTE'lere Dönüştürme” 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 Coding Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Coding Interview Prep kursu toplamda 4 dersten oluşur.

“İç İçe Sorguları CTE'lere Dönüştürme” dersinde ne öğreneceğim?

Canlı mülakatlarda kullanılan bir örüntüyle okunamayan iç içe sorguyu adım adım CTE'lere dönüştürün. Coding 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.

Coding Interview Prep öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Coding 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 4. dersidir.

“İç İçe Sorguları CTE'lere Dönüştürme” 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 Coding Interview Prep dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Coding 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
← Coding Interview Prep Sayfasına Dön