İleri sorgu teknikleri
CTE ile sorguyu katmanlara ayır
Okunabilir isimler, tek statement kapsamı.
Kavramı anlayalım
Common Table Expression, WITH ile adlandırılan bir sorgu ifadesidir. Kendinden sonraki tek statement içinde kullanılır; kalıcı tablo veya otomatik önbellek değildir. Birden çok CTE aynı WITH bölümünde virgülle tanımlanabilir. Önceki statement’ı noktalı virgülle bitirmek WITH ayrıştırmasını açık tutar.
CTE, önce sipariş toplamını üretip sonra müşteri metriğini hesaplamak gibi aşamaları okunabilir kılar. Aynı CTE’ye çok kez referans vermek sonucunun bir kere hesaplanacağını garanti etmez. Yeniden kullanım veya indeks ihtiyacında geçici tabloyu gerçek planla karşılaştır.
Uzun sorguları anlamlı veri dönüşüm adımlarına bölmek için.
CTE’yi kalıcı tablo, materialize edilmiş sonuç veya otomatik performans iyileştirmesi sanmak.
Aynı konu. Üç farklı derinlik.
WITH InStock AS (SELECT ProductId, ProductName FROM lab.Product WHERE Stock > 0) SELECT * FROM InStock;Tek statement içinde stoklu ürünlere isim verir.
Bu sayfa SQL çalıştırmaz. Örnekleri indirilebilir SqlStudioLab veritabanında, SSMS’de uygula. Geçici tablo örneklerini yeniden çalıştırırken yalnız ilgili #tabloyu temizle. VIEW, procedure ve function örnekleri lab’da kalıcı nesne oluşturur; üretim bağlantısı kullanma.
Önce kendin dene.
Kategori başına ürün sayısını CTE’de üret, sonra iki ve üzeri olanları filtrele.
Çözümü ve açıklamasını göster
WITH Counts AS (SELECT Category, COUNT(*) AS Products FROM lab.Product GROUP BY Category) SELECT * FROM Counts WHERE Products >= 2;Electronics altı değil beş ürün içerir; toplam ürün sayısı yedidir.