FROM Yan Tümcesinde Alt Sorgular (Türetilmiş Tablolar)
Bir sorguyu sanal tablo olarak sarmalamayı ve takma adların neden zorunlu olduğunu öğrenin.
FROM Yan Tümcesinde Alt Sorgular (Türetilmiş Tablolar), CoddyKit'te ücretsiz bir Coding Interview Prep dersidir. Bu, 4 dersinin 2. 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.
Türetilmiş Tablo Nedir
FROM yan tümcesindeki bir alt sorguya türetilmiş tablo (veya satır içi görünüm) denir. Tek bir değer döndürmek yerine, dış sorgunun gerçek bir tabloymuş gibi ele aldığı eksiksiz bir sonuç kümesi döndürür.
- Birçok satırı ve birçok sütunu olabilir.
- Herhangi bir tabloda olduğu gibi onu sorgulayabilir, birleştirebilir ve filtreleyebilirsiniz.
Mülakatçılar, bir problemi aşamalara ayırıp ayıramadığınızı değerlendirmek için türetilmiş tabloları kullanır.
Takma Adlar Zorunludur
En sık karşılaşılan tuzak şudur: Türetilmiş bir tablonun mutlaka bir takma adı olmalıdır. Takma ad olmadan çoğu veritabanı motoru sorguyu reddeder.
- MySQL: Her türetilmiş tablonun kendi takma adı olmalıdır.
- Postgres: FROM içindeki alt sorgunun bir takma adı olmalıdır.
Tabloya bir ad verin (burada dept_avg) ve sütunlarına bu ad üzerinden başvurabilirsiniz.
SELECT dept_avg.dept_id, dept_avg.avg_salary
FROM (
SELECT dept_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY dept_id
) AS dept_avg;Türetilmiş Tabloda Neden Önceden Toplama Yapılır
Sık karşılaşılan bir mülakat sorunu şudur: Her çalışanın yanında kendi departmanının ortalama maaşını gösterin. Gruplamayla ilgili sorunlar yaşamadan ayrıntı satırını bir toplama işleviyle doğrudan birlikte kullanamazsınız.
Temiz yaklaşım, departman başına ortalamayı türetilmiş bir tabloda hesaplamak ve ardından bu tabloyu ayrıntı satırlarıyla yeniden birleştirmektir. Türetilmiş tablo önce her departman için tek satıra indirgenir.
SELECT e.name, e.salary, d.avg_salary
FROM employees e
JOIN (
SELECT dept_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY dept_id
) AS d ON e.dept_id = d.dept_id;Toplama Sonucuna Göre Filtreleme
Türetilmiş tablolar, dış sorguda HAVING ile karmaşık işlemlere başvurmadan hesaplanmış bir toplama sonucuna göre filtreleme yapmanızı sağlar. Ortalama maaşı 60000 değerini aşan yalnızca departmanları istediğinizi varsayalım.
Toplamayı iç sorguda yapar, ardından dışarıda türetilmiş sütun üzerinde sıradan bir WHERE uygularız. Dış sorgu, avg_salary sütununu sıradan bir sütun olarak görür.
SELECT dept_id, avg_salary
FROM (
SELECT dept_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY dept_id
) AS d
WHERE avg_salary > 60000;İki Toplama Düzeyi
Türetilmiş tablolar, bir toplama işlevinin sonucu üzerinde yeniden toplama yapmanız gerektiğinde çok işe yarar. Klasik bir mülakat sorusu şöyledir: Departman başına ortalama maaşların ortalaması nedir?
AVG(AVG(...)) ifadelerini doğrudan iç içe kullanamazsınız. İç sorgu her departman için bir ortalama üretir; dış sorgu da bu ortalamaların ortalamasını alır.
SELECT AVG(avg_salary) AS avg_of_dept_avgs
FROM (
SELECT dept_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY dept_id
) AS d;Hesaplanan Sütunları Adlandırma
Türetilmiş bir tablodaki herhangi bir ifadeye dışarıdan başvurmak istiyorsanız, o ifadeye bir takma ad vermeniz gerekir. İç sorgudaki salary * 12 ifadesi aksi hâlde veritabanının atadığı ve güvenemeyeceğiniz bir ada sahip olur.
Hesaplanan sütunlara her zaman takma ad verin. Mülakatçılar, takma adı olmayan bir ifadeye başvurduğunuzu ve var olmayabilecek bir sütun adı varsaydığınızı fark eder.
SELECT name, annual_salary
FROM (
SELECT name, salary * 12 AS annual_salary
FROM employees
) AS yearly
WHERE annual_salary > 100000;İki Türetilmiş Tabloyu Birleştirme
Birden fazla türetilmiş tabloyu birbiriyle birleştirebilirsiniz. Burada önceden toplama yapılmış iki alt sorguyu birleştirerek her departmanın çalışan sayısını toplam maaş ödemesiyle karşılaştırıyoruz.
Her türetilmiş tablo bir alt soruyu yanıtlar; birleştirme işlemi bunları bir araya getirerek nihai raporu oluşturur. Bu aşamalı düşünme biçimi, orta seviye mülakatlarda tam olarak ödüllendirilen beceridir.
SELECT c.dept_id, c.headcount, p.payroll
FROM (
SELECT dept_id, COUNT(*) AS headcount
FROM employees GROUP BY dept_id
) AS c
JOIN (
SELECT dept_id, SUM(salary) AS payroll
FROM employees GROUP BY dept_id
) AS p ON c.dept_id = p.dept_id;Kapsam: Dış Sorgu İçeriği Göremez
Önemli bir kural şudur: Dış sorgu yalnızca türetilmiş tablonun SELECT listesinde dışa açtığı sütunlara başvurabilir. Yalnızca alt sorgunun içinde kullanılan sütunlar dışarıdan görünmez.
İç sorgu dept_id ve avg_salary sütunlarını seçiyorsa, salary veya name dışarıda kullanılamaz; bu sütunlar toplama işlemi sırasında tüketilmiştir. Mülakatçılar bu kapsam sınırını özellikle sorgular.
SELECT dept_id, avg_salary
FROM (
SELECT dept_id, AVG(salary) AS avg_salary
FROM employees GROUP BY dept_id
) AS d;Türetilmiş Tablo ve CTE
Türetilmiş bir tablo ve Ortak Tablo İfadesi (CTE) çoğu zaman aynı planı üretir. Mülakatçılar, neden birini tercih edeceğinizi sorabilir:
- Türetilmiş tablo: Sorgunun içine yazılır ve tek seferlik kullanım için uygundur.
- CTE (
WITH): En üstte adlandırılır, okunabilirdir ve birden çok kez başvuruluyorsa yeniden kullanılabilir.
Derin iç içe geçmiş mantıkta CTE işlem hattı yukarıdan aşağıya okunur; türetilmiş tablo ise içten dışa okunur.
WITH dept_avg AS (
SELECT dept_id, AVG(salary) AS avg_salary
FROM employees GROUP BY dept_id
)
SELECT * FROM dept_avg WHERE avg_salary > 60000;LATERAL / İlişkili FROM Alt Sorgusu
Normalde bir FROM alt sorgusu dış sorgunun satırlarına başvuramaz. LATERAL (Postgres) veya CROSS APPLY (SQL Server) bu kısıtlamayı kaldırarak türetilmiş tablonun her dış satır için çalışmasını sağlar.
Bu yapı, satır başına ilk N sonucu arama işlemlerini mümkün kılar. Bu anahtar sözcüğün var olduğunu bilmeniz, orta seviye bir değerlendirmede bile kıdemli düzeyde farkındalık sergilediğinizi gösterir.
SELECT d.dept_name, top_emp.name, top_emp.salary
FROM departments d
CROSS JOIN LATERAL (
SELECT name, salary FROM employees e
WHERE e.dept_id = d.id
ORDER BY salary DESC LIMIT 1
) AS top_emp;Mülakat İçin Kısa Yanıt
FROM yan tümcesi alt sorguları hakkında soru sorulursa şöyle söyleyiniz: "Türetilmiş tablo, FROM içinde yer alan ve dış sorgunun tablo gibi kullandığı bir sonuç kümesi döndüren alt sorgudur. Bir takma adı olmalıdır; dış sorgu yalnızca seçtiği sütunları görebilir ve birleştirmeden önce ön toplulaştırma yapmak veya bir toplulaştırmayı yeniden toplulaştırmak için idealdir."
LATERAL ifadesinin dış satırlara başvurmasına izin verdiğini de ekleyin; böylece konunun her yönünü ele almış olursunuz.
Hızlı Kontrol
FROM yan tümcesindeki bir alt sorgu için her zaman gerekli olan ifadeyi seçiniz.
Özet
Türetilmiş tablolar artık net:
- FROM alt sorgusu sanal bir tablo döndürür — çok sayıda satır ve sütun içerebilir.
- Bir takma adı olmalıdır; dış sorgu yalnızca seçilen sütunları görür.
- Birleştirmeden önce ön toplulaştırma yapmak, toplulaştırmalar üzerinde filtre uygulamak veya bir toplulaştırmayı yeniden toplulaştırmak için kullanınız.
- CTE, okunabilir ve adlandırılmış alternatiftir;
LATERAL/CROSS APPLYdış satırlara başvurulmasına izin verir.
Sırada: IN, ANY ve ALL ile küme üyeliği alt sorguları.
Sıkça Sorulan Sorular
“FROM Yan Tümcesinde Alt Sorgular (Türetilmiş Tablolar)” dersi ücretsiz mi?
Evet — “FROM Yan Tümcesinde Alt Sorgular (Türetilmiş Tablolar)” 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.
“FROM Yan Tümcesinde Alt Sorgular (Türetilmiş Tablolar)” dersinde ne öğreneceğim?
Bir sorguyu sanal tablo olarak sarmalamayı ve takma adların neden zorunlu olduğunu öğrenin. 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 2. dersidir.
“FROM Yan Tümcesinde Alt Sorgular (Türetilmiş Tablolar)” 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
- SELECT ve WHERE İçinde Skaler Alt Sorgular
- FROM Yan Tümcesinde Alt Sorgular (Türetilmiş Tablolar)
- IN, ANY ve ALL Alt Sorguları
- EXISTS ve IN Performans Karşılaştırması