Alt sorgular (subqueries), bir SQL sorgusu içinde başka bir SQL sorgusunun çalıştırılmasını sağlayan güçlü bir tekniktir. Özellikle karmaşık veri analizlerinde ve filtreleme işlemlerinde kullanılır. Alt sorgular genellikle SELECT, INSERT, UPDATE ve DELETE ifadelerinde kullanılabilir.
1. Alt Sorguların Temel Kullanımı
📌 Alt sorgular parantez ()` içerisinde yazılır ve ana sorguya veri sağlamak için kullanılır.
Genel yapı:
SELECT sütun_adı FROM tablo_adı
WHERE sütun_adı = (ALT SORGU);
📌 Alt sorgular genellikle WHERE, HAVING veya FROM içinde kullanılır.
2. WHERE İçinde Alt Sorgu Kullanımı
Örnek: En yüksek maaşı alan çalışanı bulalım.
SELECT * FROM çalışanlar
WHERE maaş = (SELECT MAX(maaş) FROM çalışanlar);
✅ Açıklama:
- İç sorgu (
SELECT MAX(maaş) FROM çalışanlar) çalışan tablosundaki en yüksek maaşı bulur. - Dış sorgu, maaşı bu değere eşit olan çalışanı döndürür.
3. IN ile Alt Sorgu Kullanımı
Örnek: Belirli bir departmanda çalışan kişileri listeleyelim.
SELECT * FROM çalışanlar
WHERE departman_id IN (SELECT departman_id FROM departmanlar WHERE departman_adı = 'Muhasebe');
✅ Açıklama:
- İç sorgu, “Muhasebe” departmanına ait
departman_iddeğerlerini bulur. - Dış sorgu, bu
departman_iddeğerine sahip çalışanları getirir.
4. FROM İçinde Alt Sorgu Kullanımı
📌 Alt sorgular, sanal tablolar oluşturmak için FROM içinde kullanılabilir.
Örnek: Maaş ortalamasını bulan bir alt sorgu ile çalışanların durumunu listeleyelim.
SELECT ad, maaş,
(SELECT AVG(maaş) FROM çalışanlar) AS ortalama_maas
FROM çalışanlar;
✅ Açıklama:
- İç sorgu (
SELECT AVG(maaş) FROM çalışanlar) tüm çalışanların maaş ortalamasını hesaplar. - Bu değer dış sorguda her satır için bir sütun olarak görüntülenir.
5. EXISTS ile Alt Sorgu Kullanımı
📌 EXISTS, alt sorgunun sonuç döndürüp döndürmediğini kontrol eder.
Örnek: En az bir çalışanı olan departmanları listeleyelim.
SELECT * FROM departmanlar d
WHERE EXISTS (SELECT * FROM çalışanlar c WHERE c.departman_id = d.departman_id);
✅ Açıklama:
- İç sorgu, her bir departmanın en az bir çalışanı olup olmadığını kontrol eder.
- Eğer çalışanı olan bir departman varsa, dış sorgu o departmanı listeler.
6. ALT Sorgular ile UPDATE Kullanımı
📌 Bir tabloyu güncellerken alt sorgular kullanılabilir.
Örnek: Tüm çalışanların maaşlarını, departmanlarının ortalama maaşına eşitleyelim.
UPDATE çalışanlar
SET maaş = (SELECT AVG(maaş) FROM çalışanlar AS c WHERE c.departman_id = çalışanlar.departman_id);
✅ Açıklama:
- İç sorgu, her departmanın maaş ortalamasını hesaplar.
- Dış sorgu, çalışanların maaşlarını ilgili departmanın maaş ortalamasına ayarlar.
7. ALT Sorgular ile DELETE Kullanımı
📌 Belli bir koşula uyan satırları silerken alt sorgular kullanılabilir.
Örnek: Maaşı en düşük olan çalışanı silelim.
DELETE FROM çalışanlar
WHERE maaş = (SELECT MIN(maaş) FROM çalışanlar);
✅ Açıklama:
- İç sorgu, en düşük maaşı hesaplar.
- Dış sorgu, bu maaşa sahip olan çalışanı siler.
8. ALT Sorgular ile INSERT Kullanımı
📌 Başka bir tablodan veri eklemek için alt sorgular kullanılabilir.
Örnek: Maaşı 20.000’den yüksek olan çalışanları yüksek_maaşlılar tablosuna ekleyelim.
INSERT INTO yüksek_maaşlılar (çalışan_id, ad, maaş)
SELECT çalışan_id, ad, maaş FROM çalışanlar WHERE maaş > 20000;
✅ Açıklama:
- İç sorgu, maaşı 20.000’den yüksek çalışanları seçer.
- Dış sorgu, bu verileri
yüksek_maaşlılartablosuna ekler.
SQL ALT Sorgular Özet
| Kullanım Alanı | Açıklama |
|---|---|
| WHERE içinde | Bir değeri karşılaştırmak için kullanılır. |
| IN içinde | Liste döndürerek sorgu sonucunu filtreler. |
| FROM içinde | Sanal tablo oluşturur. |
| EXISTS içinde | Alt sorgunun veri içerip içermediğini kontrol eder. |
| UPDATE ile | Başka bir tablodan veri alarak güncelleme yapar. |
| DELETE ile | Belirli bir koşula uyan veriyi siler. |
| INSERT ile | Bir tablodan veri seçerek başka bir tabloya ekler. |


