SQL alt sorguları ve CTE’ler
Kısaca: Alt sorgu, başka bir sorgunun içindeki sorgudur. CTE (“common table expression”, WITH) bir ara sorguya ad verir ve uzun sorguları okunabilir kılar.
Biraz daha ayrıntılı: İkisi de tek bir basit sorguyla çözülemeyen görevleri çözer; örneğin “ortalamanın üzerinde ciro yapan müşteriler”.
Ayrıntılı
- Skaler: Tam olarak bir değer döndürür:
WHERE tutar > (SELECT AVG(tutar) FROM siparis). - Liste:
WHERE musteri_id IN (SELECT id FROM musteri WHERE ulke = 'DE'). - EXISTS:
WHERE EXISTS (SELECT 1 FROM siparis s WHERE s.musteri_id = m.id)en az bir satır olup olmadığını denetler ve ilk eşleşmede durur. Özellikle NULL tuzaklarına karşı (bkz. SQL’de NULL) çoğu zamanIN’den hızlı ve güvenlidir. - İlişkili (correlated): Alt sorgu dış satıra başvurur ve mantıksal olarak satır başına çalışır.
- FROM içinde: Takma ad verdiğin bir “türetilmiş tablo” olarak alt sorgu.
- CTE:
WITH ciro AS (SELECT musteri_id, SUM(tutar) s FROM siparis GROUP BY musteri_id) SELECT ... FROM ciro .... Art arda birkaç CTE karmaşık analizleri yapılandırır. Özyinelemeli: özyinelemeli CTE’ler. - Seçim: Okunabilirlik önemlidir. Modern iyileştiriciler alt sorguları çoğunlukla join gibi ele alır.
Ayrıca bak: SQL JOIN’leri, Pencere işlevleri