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_id
değerlerini bulur. - Dış sorgu, bu
departman_id
değ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ılar
tablosuna 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. |