Tablolar üzerinde karmaşık sorgular yaparken, Common Table Expressions (CTE) kullanırız.
Cte, sorguların okunabilirliğini ve bakımını kolaylaştırırken performans optimizasyonu için de önemlidir. Bir kere derlenen kodlar sorgunun istenilen yerinde defalarca kullanılabilir. Aslında bu yönden geçici tablolara benziyor diyebiliriz (temp) ama özellikle ram tüketimi açısından cte kullanmanın daha iyi olduğunu söyleyebiliriz. Çünkü geçici tablolar sorgu bitinceye kadar tabloyu bellekte tutacaklardır.
Cte konusunu bir örnek vererek sonlandıralım. Aşağıdaki örnekte canias erp veritabanında olan bir tablodan siparişlerin tedarikçilere göre toplam ne kadar harcama yapıldığını(bütçeden ne kadar kullandıklarını) gösteren sorguyu yazalım.
WITH ToplamSatis AS (
SELECT
NAME1,
SUM(GRANDTOTAL) AS toplam_satis
FROM IASPURHEAD WHERE ISDELETE = 0
GROUP BY NAME1
)
SELECT
NAME1,
toplam_satis,
(SELECT SUM(toplam_satis) FROM ToplamSatis) AS genel_toplam_satis
FROM ToplamSatis ORDER BY NAME1;
Yukarıdaki sorguda ilk kısımda tedarikçileri isimlerine göre gruplayıp, ikinci kısımda genel satış rakamını da ekleyerek kullanıcıların tedarikçinin genel satış içindeki durumunu görmelerini sağlıyoruz.
Gördüğünüz gibi ilk kısımdaki toplam_satis değerini sorguda istediğimiz yerde kullanabiliyoruz. Bu aynı zamanda bizi gereksiz uzun sorgulardan kurtarıyor.
Serdal Aydoğmuş
https://www.saydogmus.com/