0Pricing
SQL Interview Prep · Ders

İlişkili Alt Sorgunun Anatomisi

İç sorgunun dış satıra nasıl başvurduğunu ve satır başına yürütme modelini öğrenin.

İlişkili Alt Sorgunun Anatomisi, 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.

Bir Alt Sorguyu İlişkili Yapan Nedir

Mülakatçılar alt sorguları iki gruba ayırır. Düz (ilişkisiz) bir alt sorgu kendi başına çalışabilir. İlişkili bir alt sorgu dış sorgudaki bir sütuna başvurur; bu nedenle tek başına çalışamaz.

  • İlişkisiz: bir kez değerlendirilir ve sonuç her dış satır için yeniden kullanılır.
  • İlişkili: o satıra bağlı olduğu için her dış satır için bir kez yeniden değerlendirilir.

Belirleyici işaret, dış tablodan bir sütunun iç sorguda görünmesidir. Bunu fark ettiğinizde kalıbın adını anında koyabilirsiniz.

Satır Başına Yürütme Modeli

Motorun dış satırlar üzerinde döngü kurduğunu düşünün. Her dış satır için motor, o satırın değerlerini iç sorguya yerleştirir, sorguyu yürütür ve sonucu bir şeye karar vermek veya bir değer hesaplamak için kullanır.

Bu, mülakat yapanların ifade etmenizi istediği zihinsel modeldir: "iç sorgu her dış satır için bir kez yürütülür."

Bu ifade, klasik devam sorusunu da ima eder: İlişkili alt sorgular yavaş olabilir, çünkü iç sorgu binlerce kez çalıştırılabilir. Bunu 4. derste düzelteceğiz.

Dış Sorgu Başvurusunu Bulma

Burada çalışanlar tablosu ile maaş alan çalışanları temsil eden dış takma ad e1, e1.dept_id okuyan bir iç sorguyu yönlendirir. Dış satıra yapılan bu başvuru, ilişkilendirmenin kendisidir.

Takma ad önekini kaldırırsanız iç sorgu artık tek başına derlenmez. Onu ilişkili yapan da tam olarak bu bağımlılıktır.

SELECT e1.name, e1.salary
FROM employees e1
WHERE e1.salary > (
    SELECT AVG(e2.salary)
    FROM employees e2
    WHERE e2.dept_id = e1.dept_id
);

Bu Sorguyu Sesli Okuma

Önceki sorguyu bir mülakatta anlatacağınız şekilde günlük dille ifade edin:

"Her çalışan e1 için kendi departmanının ortalama maaşını bulun ve yalnızca bu departman ortalamasından daha fazla kazanan çalışanı tutun."

İç sorgudaki WHERE e2.dept_id = e1.dept_id başvurusu, ortalamayı bu çalışanın departmanına bağlar. Bu satır olmadan herkesi şirket genelindeki ortalamayla karşılaştırırdınız.

Takma Adlar Zorunludur

İç ve dış sorgu aynı tabloya eriştiğinde, motorun bir sütunun hangi satıra ait olduğunu anlayabilmesi için ikisine de takma ad vermelisiniz.

  • e1 = sınanan dış satır.
  • e2 = tablo üzerinde yapılan iç tarama.

Takma adları kaldırırsanız dept_id belirsiz hâle gelir; birçok motor bu durumda onu sessizce iç tabloya bağlar ve ilişkilendirmeyi bozar. Mülakat yapanlar tam olarak bu hatayı bilerek soruya yerleştirir.

SELECT İçinde İlişkili Alt Sorgu

İlişkili alt sorgular yalnızca WHERE ile sınırlı değildir. Bir SELECT listesinde, yine her dış satır için değerlendirilen hesaplanmış bir sütun üretirler.

Aşağıda her sipariş, aynı müşterinin verdiği diğer siparişlerin sayısını gösterir. İçteki sayım, o.customer_id üzerinden ilişkilendirilmiştir.

SELECT o.order_id,
       o.customer_id,
       (SELECT COUNT(*)
        FROM orders o2
        WHERE o2.customer_id = o.customer_id) AS customer_order_count
FROM orders o;

Skaler Tam Olarak Tek Değer Demektir

SELECT içinde kullanılan veya =, >, < ile karşılaştırılan ilişkili bir alt sorgu, her dış satır için tek bir skaler değer döndürmelidir.

Birden fazla satır döndürürse veritabanı "alt sorgu birden fazla satır döndürüyor" gibi bir hata üretir.

COUNT, MAX veya AVG gibi toplulaştırma işlevleri tek bir değer döndürür. Bu nedenle skaler ilişkili alt sorgularda sık kullanılırlar. Bu kuralı bilmek, sık karşılaşılan bir çalışma zamanı sürprizini önler.

Alt Sorgu NULL Döndürdüğünde

Skaler bir ilişkili alt sorgu, iç sorguda sıfır satırla eşleşebilir. Bir toplulaştırma işlevi bu durumda NULL döndürür; COUNT ise 0 döndürür.

Bu NULL, dış ifadenize taşınır. NULL ile yapılan karşılaştırmalar UNKNOWN sonucunu verir; bu nedenle dış satır fark edilmeden sonuçtan çıkarılabilir.

Bir geri dönüş değerine ihtiyacınız varsa alt sorguyu COALESCE içine alın. Mülakat yapanlar, hiçbir iç satır eşleşmediğinde ne olacağını sormayı sever ve NULL davranışından söz etmenizi bekler.

SELECT c.customer_id,
       COALESCE((SELECT MAX(o.amount)
                 FROM orders o
                 WHERE o.customer_id = c.customer_id), 0) AS biggest_order
FROM customers c;

Uygulamalı Örnek: En Güncel Sipariş Tarihi

Yaygın bir görev şudur: her müşteriyi en güncel sipariş tarihiyle birlikte göstermek. SELECT içindeki ilişkili bir alt sorgu bunu doğrudan yapar.

Her müşteri satırı için iç sorgu, o.customer_id = c.customer_id aracılığıyla o müşterinin en son sipariş tarihini bulur.

SELECT c.customer_id,
       c.name,
       (SELECT MAX(o.order_date)
        FROM orders o
        WHERE o.customer_id = c.customer_id) AS last_order_date
FROM customers c;

Neden Yavaş Olabilir

İç sorgu her dış satır için bir kez çalıştığından, büyük bir dış tablo üzerindeki ilişkili alt sorgu milyonlarca iç yürütmeyi tetikleyebilir.

  • İlişkilendirmede kullanılan sütundaki bir dizin (burada orders.customer_id), her iç yürütmenin hızla tamamlanmasını sağlar.
  • Dizin yoksa her yürütme tablonun tamamını tarayabilir ve yaklaşık O(n*m) iş yapılır.

Mülakatlarda performans için kullanacağınız iki aracı her zaman belirtin: dizin ve birleştirme olarak yeniden yazma.

İlişkili ve İlişkisiz Yan Yana

Aradaki fark tek bir satırdır. İlişkisiz sürüm herkesi şirket ortalamasıyla karşılaştırır; ilişkili sürüm ise her kişiyi kendi departmanıyla karşılaştırır.

İkisini de okuyun ve tek bir WHERE e2.dept_id = e1.dept_id satırının tüm anlamı nasıl değiştirdiğine dikkat edin.

-- Uncorrelated: one global average, computed once
SELECT name FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

-- Correlated: per-department average, recomputed per row
SELECT e1.name FROM employees e1
WHERE e1.salary > (
    SELECT AVG(e2.salary) FROM employees e2
    WHERE e2.dept_id = e1.dept_id
);

Hızlı Sınama

İlişkili bir alt sorguyu tanımlayan özelliği ne kadar iyi kavradığınızı sınayın.

Özet: İlişkili Alt Sorgunun Yapısı

Temel çıkarımlar:

  • İlişkili bir alt sorgu dış satıra başvurur ve her dış satır için bir kez çalışır.
  • İlişkilendirmenin belirsiz olmaması için iki tablo da aynı tablo olduğunda ikisine takma ad verin.
  • Skaler kullanım tam olarak tek bir değer döndürmelidir; sıfır eşleşme NULL üretir, bu nedenle COALESCE ile güvenceye alın.
  • SELECT veya WHERE içinde kullanılabilir ve performans, ilişkilendirmede kullanılan sütunun dizinlenmesine bağlıdır.

Mülakatta "her dış satır için bir kez çalışır" deyin; temel kavramı tam olarak kavradığınızı göstermiş olursunuz.

Sıkça Sorulan Sorular

“İlişkili Alt Sorgunun Anatomisi” dersi ücretsiz mi?

Evet — “İlişkili Alt Sorgunun Anatomisi” 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.

“İlişkili Alt Sorgunun Anatomisi” dersinde ne öğreneceğim?

İç sorgunun dış satıra nasıl başvurduğunu ve satır başına yürütme modelini öğ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.

“İlişkili Alt Sorgunun Anatomisi” 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. İlişkili Alt Sorgunun Anatomisi
  2. GROUP BY Olmadan Grup Başına Toplulaştırma
  3. İlişkili EXISTS ve NOT EXISTS
  4. İlişkili Alt Sorguları Birleştirme Olarak Yeniden Yazma
← SQL Interview Prep Sayfasına Dön