SQL Alt Sorgular (Subqueries)

Alt sorgular (subqueries), SQL sorgularının içinde başka SQL sorguları yazılmasına olanak tanır. Alt sorgular, dış sorgunun (outer query) bir parçası olarak çalışır ve genellikle karmaşık sorguları daha kolay yazmak için kullanılır. Bu yazıda alt sorguların temel kavramlarını ve farklı türlerini detaylı bir şekilde inceleyeceğiz.
Tek Satır Döndüren Alt Sorgular
Tek satır döndüren alt sorgular (scalar subqueries), yalnızca bir değer (örneğin, tek bir sayı veya metin) döndüren alt sorgulardır. Bu alt sorgular genellikle WHERE, SELECT, veya HAVING ifadelerinde kullanılır.
Örnek Kullanım
Aşağıdaki örnek, maaşı departmanındaki en yüksek maaşa eşit olan çalışanı bulur:
SELECT
employee_id, first_name, salary
FROM
employees
WHERE
salary = (SELECT MAX(salary) FROM employees);
Açıklama:
- İç sorgu
MAX(salary)
ifadesiyle çalışanlar tablosundaki en yüksek maaşı döndürür. - Dış sorgu bu değeri kullanarak maaşı en yüksek olan çalışanı getirir.
Kullanım Alanları
- Maksimum veya minimum değerleri bulma
- Sabit bir değerle karşılaştırma
- Tek bir koşul üzerinde karar verme
Çok Satır Döndüren Alt Sorgular
Çok satır döndüren alt sorgular, birden fazla değer (örneğin, birden fazla satır veya sütun) döndürebilir. Bu tür alt sorgular genellikle IN, ANY, veya ALL gibi operatörlerle kullanılır.
Örnek Kullanım
Aşağıdaki örnek, departmanında ortalama maaştan yüksek maaş alan çalışanları getirir:
SELECT
employee_id, first_name, salary
FROM
employees
WHERE
department_id IN (
SELECT department_id
FROM employees
GROUP BY department_id
HAVING AVG(salary) > 5000
);
Açıklama:
- İç sorgu, maaş ortalaması 5000’den büyük olan departmanları döndürür.
- Dış sorgu bu departmanlarda çalışan kişileri getirir.
Kullanım Alanları
- Gruplar üzerindeki filtreleme işlemleri
- Birden fazla değeri karşılaştırma
- Koşulları dinamik olarak belirleme
Kendi Kendine Bağlanma (Correlated Subqueries)
Kendi kendine bağlanma yapan alt sorgular (correlated subqueries), dış sorgudaki her satır için iç sorgunun tekrar çalışmasını gerektirir. Bu tür alt sorgular, dış sorgunun bir sütununa referans verir ve her satır için farklı bir sonuç döndürebilir.
Örnek Kullanım
Aşağıdaki örnek, her çalışanın kendi departmanındaki ortalama maaştan yüksek maaş alıp almadığını kontrol eder:
SELECT
employee_id, first_name, salary
FROM
employees e1
WHERE
salary > (
SELECT AVG(salary)
FROM employees e2
WHERE e1.department_id = e2.department_id
);
Açıklama:
- İç sorgu, dış sorgudaki her bir çalışan için aynı departmandaki çalışanların maaş ortalamasını hesaplar.
- Dış sorgu bu değeri kullanarak maaşı ortalamanın üzerinde olan çalışanları seçer.
Kullanım Alanları
- Satır bazlı karşılaştırmalar
- Karmaşık koşulların uygulanması
- Performans analizi ve optimizasyon
Alt Sorguların Avantajları
- Modülerlik: Karmaşık sorguların parçalara ayrılarak daha anlaşılır hale gelmesini sağlar.
- Dinamiklik: Koşulları dış sorguya göre dinamik olarak belirler.
- Esneklik: Birden fazla veri kaynağından gelen bilgilerin birleştirilmesini kolaylaştırır.
Alt Sorguların Dezavantajları
- Performans: Kendi kendine bağlanma yapan alt sorgular özellikle büyük veri setlerinde yavaş çalışabilir.
- Okunabilirlik: Çok karmaşık alt sorgular, sorgunun genel okunabilirliğini azaltabilir.
Alt Sorgular ile İlgili Önemli Notlar
- Alt sorgular, her zaman dış sorgu için gerekli olan veri türünü döndürmelidir. Aksi takdirde, tür uyumsuzluğu hatası alınabilir.
- Performansı artırmak için alt sorguları optimize etmek gerekebilir. Örneğin, uygun bir INDEX kullanımı performansı ciddi ölçüde artırabilir.
- EXISTS operatörü, belirli durumlarda IN operatörüne göre daha hızlı çalışabilir.
Alt sorgular, SQL sorgularını daha güçlü ve esnek hale getiren önemli araçlardır. Tek satır, çok satır ve kendi kendine bağlanma yapan alt sorguların mantığını kavramak, veri tabanı yönetimi ve analizinde karmaşık işlemleri kolaylıkla yapmanıza olanak tanır. Bu bilgileri pratikte uygulayarak sorgu yazma becerilerinizi geliştirebilirsiniz.