İçeriğe geç
parazade

Alt Sorgu Nedir?

İngilizce: Subquery

Yayın: · Son güncelleme:

Alt Sorgu Nedir? Kısaca

Alt sorgu (subquery), başka bir SQL sorgusunun içinde parantez içine yazılan ve sonucu dıştaki sorguda kullanılan sorgudur. Bir değeri ya da kayıt listesini önce hesaplayıp ana sorguya aktarmayı sağlar.

Alt Sorgu nedir?
İçindekiler
  1. Alt sorgu nedir?
  2. Nerelerde kullanılır?
  3. Bağlı alt sorgu
  4. Nelere dikkat etmeli?

Alt sorgu nedir?

Alt sorgu, bir sorgunun içine yerleştirilmiş ikinci sorgudur. İngilizcede subquery ya da iç sorgu (inner query) olarak geçer. Veritabanı önce içteki sorguyu çalıştırır, elde edilen sonucu dıştaki sorgunun koşulu ya da veri kaynağı olarak kullanır.

Tek adımda cevaplanamayan sorular için idealdir. "Ortalamanın üstünde satış yapan ürünler hangileri?" sorusunda önce ortalama hesaplanmalı, sonra ürünler bu değerle karşılaştırılmalıdır.

Nerelerde kullanılır?

Alt sorgu, sorgunun üç farklı yerinde yer alabilir. WHERE içinde koşul üretir, FROM içinde geçici bir tablo gibi davranır, SELECT içinde ise her satır için ek bir değer hesaplar.

Varsayımsal bir örnek, fiyatı ortalama fiyatın üstündeki ürünleri listeler:

SELECT ad, fiyat
FROM urunler
WHERE fiyat > (SELECT AVG(fiyat) FROM urunler);

Ortalama 240 TL çıkarsa sorgu, 240 TL'den pahalı ürünleri getirir.

Bağlı alt sorgu

İçteki sorgu dış sorgudaki bir sütuna başvuruyorsa buna bağlı (correlated) alt sorgu denir. Örneğin "kendi kategorisinin ortalamasından pahalı ürünler" sorgusunda iç sorgu her ürün için o ürünün kategorisine göre yeniden çalışır. Bu esneklik sağlar, ama büyük tablolarda yavaşlamaya yol açabilir.

Nelere dikkat etmeli?

Aynı sonuca çoğu zaman JOIN ile de ulaşılabilir ve bazı veritabanlarında JOIN daha hızlı çalışır. İç içe üç dört alt sorgu yazmak okunabilirliği düşürür. Böyle durumlarda WITH ifadesiyle yazılan ortak tablo ifadeleri (CTE) ya da bir view, sorguyu adım adım okunur hâle getirir.

Sıkça Sorulan Sorular

Alt sorgu birden fazla değer döndürebilir mi?

Evet. Birden fazla değer döndüren alt sorgular IN, EXISTS veya ANY gibi ifadelerle kullanılır. Tek değer bekleyen bir karşılaştırmada ise alt sorgunun yalnızca bir satır döndürmesi gerekir.

Alt sorgu mu JOIN mi daha iyi?

Bu, veritabanına ve sorguya bağlıdır. Modern sorgu planlayıcıları pek çok alt sorguyu JOIN'e çevirerek çalıştırır; kesin karar için iki versiyonu EXPLAIN ile karşılaştırmak en sağlıklı yoldur.

İlgili terimler