Anasayfa / Yazılım / SQL / Toplama Fonksiyonlarının Alt Sorgular İçinde SELECT İle Birlikte Kullanılması

Toplama Fonksiyonlarının Alt Sorgular İçinde SELECT İle Birlikte Kullanılması

Toplama fonksiyonlarının alt sorgular içinde SELECT ile birlikte kullanılmasını isteyebiliriz. Ancak bu tavsiye edilen bir durum değildir çünkü eğer sorguda birden fazla ilişkili alt sorgu mevcut olursa performans ciddi şekilde düşer. Söz dizimi olarak aşağıdaki gibi kullanırız :

SELECT listelenecek kolonlar (SELECT toplama fonksiyonu(kolon1) FROM tablo2 WHERE kolon2 = tablo1.kolon1) AS geçici bir ad FROM tablo1

En dışta yer alan sorgunun her bir satırı için alt sorgu tarafından yalnızca bir satır üretilir ve alt sorgudan sadece bir ifade gerekir.

Örnekler :

SELECT CustomerID, (SELECT COUNT(*) FROM Sales.SalesOrderHeader 
WHERE CustomerID = Musteri.CustomerID) CountOfSales FROM Sales.Customer AS Musteri
ORDER BY CountOfSales DESC

2013031901

Sorgum sonucu her satır başına bir değer döndürüldüğünü görebiliyoruz. Sorgu içinde ayrıca WHERE deyimi de kullanılmaktadır. İç sorguda yer alan CustomerID ile dış sorguda yer alan CustomerID birbirine eşit olmalıdır, bunu da sorguda sağladık. Alt sorgunın hemen ardından da alias name (geçici takma ad) tanımlanmıştır.

İki tablo üzerinde aynı isimdeki kolonlar ile çalışırken her ikisininde nitelendirilmesi gerekir. Eğer alt sorgu içinde birden fazla tablo varsa burda da kullanılan kolonlar nitelendirilmelidir.

Bir başka örnek :

SELECT CustomerID, (SELECT COUNT(*) AS CountOfSales FROM Sales.SalesOrderHeader
WHERE CustomerID = Musteri.CustomerID) AS CountOfSales, (SELECT SUM(TotalDue)
FROM Sales.SalesOrderHeader WHERE CustomerID = Musteri.CustomerID) AS SumOfTotalDue,
(SELECT AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE CustomerID = Musteri.CustomerID)
AS AvgOfTotalDue FROM Sales.Customer AS Musteri ORDER BY CountOfSales DESC;

2013031902

Bu sorguda 3 tane alt sorgu vardır, dolayısı ile 3 değer gereklidir. Tabi bu şekilde bir sorgu performans düşüşüne sebebiyet verir. Dolayısı ile bu yazımın başında belirttiğim gibi bu teknik çok önerilen bir teknik değildir. Dolayısı ile bu yazının örnek alınacak bir yanı yok 🙂 Sadece olmaması gerekeni sizlerle paylaştım.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir