SQL Alt Sorgular (Subqueries) – Detaylı Kurs Rehberi

 


SQL Alt Sorgular (Subqueries) – Detaylı Kurs Rehberi

📚 SQL Alt Sorgular (Subqueries)

Detaylı Kurs Rehberi – Sıfırdan İleri Seviyeye

⏱️ Süre: 45 dk
📊 Seviye: Orta-İleri
🎯 12 Bölüm
💻 15+ Örnek
SQL subquery SQL alt sorgu SQL correlated subquery SQL IN subquery SQL EXISTS SQL scalar subquery SQL nested query SQL alt sorgu örnekleri

1 SQL Alt Sorgu Nedir?

1.1 Tanım

Alt sorgu (subquery), bir SQL sorgusu içinde çalışan başka bir SQL sorgusudur. Parantez () içinde yazılır ve ana sorgunun bir parçası olarak çalışır.

-- Temel Yapı SELECT kolon1, kolon2 FROM tablo WHERE kolon = (SELECT kolon FROM tablo2 WHERE kosul);

1.2 Neden Kullanılır?

Amaç Açıklama
Dinamik filtreleme Değişken koşullara göre veri çekme
Karşılaştırma Bir tablodaki değeri başka tabloyla karşılaştırma
Hesaplama Ortalama, maksimum gibi değerleri dinamik hesaplama
Veri doğrulama Varlık kontrolü (EXISTS)

2 Alt Sorgu Türleri

2.1 Sonuç Türüne Göre Sınıflandırma

┌─────────────────────────────────────────────────────────┐ │ ALT SORGU TÜRLERİ │ ├─────────────────────────────────────────────────────────┤ │ 1. Scalar Subquery → Tek satır, tek kolon (1 değer) │ │ 2. Single-Row Subquery→ Tek satır, birden fazla kolon │ │ 3. Multi-Row Subquery → Birden fazla satır, tek kolon │ │ 4. Multi-Column Subquery→ Birden fazla satır ve kolon │ │ 5. Correlated Subquery→ Ana sorguyla bağlantılı çalışan│ │ 6. Nested Subquery → İç içe geçmiş alt sorgular │ └─────────────────────────────────────────────────────────┘

2.2 Yerleşimine Göre Sınıflandırma

Konum Kullanım Alanı Örnek Operatörler
WHERE Filtreleme =, >, <, IN, EXISTS, ANY, ALL
FROM Sanal tablo oluşturma Tablo alias ile
SELECT Kolon değeri olarak Scalar subquery
HAVING Grup filtresi Agregat karşılaştırması

3 Scalar Subquery (Tek Değerli Alt Sorgu)

ℹ️
Tanım: Yalnızca tek bir satır ve tek bir kolon döndüren alt sorgudur.

3.1 Örnek: Ortalama Maaştan Yüksek Çalışanlar

-- Çalışanlar tablosu oluştur CREATE TABLE calisanlar ( id INT PRIMARY KEY, ad VARCHAR(50), departman VARCHAR(50), maas DECIMAL(10,2) ); -- Ortalama maaştan yüksek kazananları bul SELECT ad, departman, maas FROM calisanlar WHERE maas > (SELECT AVG(maas) FROM calisanlar);
💡
Çalışma Mantığı:
1. İç sorgu çalışır → AVG(maas) hesaplanır (örn: 5000)
2. Dış sorgu çalışır → WHERE maas > 5000 filtresi uygulanır

3.2 Örnek: SELECT İçinde Kullanım

SELECT ad, maas, (SELECT AVG(maas) FROM calisanlar) AS ortalama_maas, maas - (SELECT AVG(maas) FROM calisanlar) AS fark FROM calisanlar;
⚠️
Önemli: Scalar subquery mutlaka tek değer döndürmelidir. Aksi halde "Subquery returns more than 1 row" hatası alınır.

4 Multi-Row Subquery (Çok Satırlı Alt Sorgu)

4.1 IN Operatörü ile Kullanım

-- "Satış" departmanındaki çalışanların proje ID'lerini bul SELECT proje_adi, calisan_id FROM projeler WHERE calisan_id IN ( SELECT id FROM calisanlar WHERE departman = 'Satış' );

4.2 NOT IN ile Kullanım

-- Hiç proje olmayan çalışanları bul SELECT ad, departman FROM calisanlar WHERE id NOT IN ( SELECT calisan_id FROM projeler WHERE calisan_id IS NOT NULL );
🚨
Dikkat: NOT IN içinde NULL değer varsa sonuç boş dönebilir. Mutlaka IS NOT NULL kontrolü ekleyin veya NOT EXISTS kullanın.

5 Correlated Subquery (Bağımlı Alt Sorgu)

ℹ️
Tanım: Ana sorgunun her satırı için ayrı ayrı çalışan alt sorgudur. Ana sorgudaki değere bağlıdır.

5.1 Örnek: Departman Ortalamasından Yüksek Maaş

SELECT c1.ad, c1.departman, c1.maas FROM calisanlar c1 WHERE c1.maas > ( SELECT AVG(c2.maas) FROM calisanlar c2 WHERE c2.departman = c1.departman -- ← Ana sorguyla bağlantı! );

5.2 Çalışma Mantığı

Adım İşlem
1 Ana sorgu ilk satırı alır (Ahmet, Satış, 6000)
2 Alt sorgu çalışır: Satış departmanı ortalaması = 5500

Yorumlar

Bu blogdaki popüler yayınlar

YouTube ile Web Sitesi SEO'su: Kapsamlı Strateji Rehberi

Uygulama Reklam Butonu