EMZETT.
Giriş yap

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 zaman IN’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