Az Bilinen Sorgulama Teknikleri-2

Grouping Sets

Birden fazla kritere göre gruplama yapmak istediğimizde group by ifadesinin union veya union all gibi operatör  ile birleşmesi sonucu kullanabiliyorduk. Raporlamalar için büyük bir ihtiyaç olan grouping sets operatörü diğer koşullara göre  daha hızlı çalışmaktadır.


select Name,Color,sum(StandardCost),SellStartDate from Production.Product
group by
GROUPING SETS(Name,Color),
(SellStartDate),
(Name),
()
order by sum(StandardCost)

Grouping Sets ifadesinden sonra gruplama yapmak istediğimiz tüm verileri aralarına virgül koyarak parantez içinde listeleyebiliriz. Boş parantez işareti verinin hiçbir kolona göre gruplanmadan genel toplam şekilde geleceğini ifade etmektedir.

Derived Table

Bir sorgu sonucunun sanal bir tablo gibi sorgulanmasını sağlayan ifadedir. Bir derived table başka bir sorguda from ifadesinden sonra bir tabloymuş gibi sorgulanabilir. Derive table sanal bir tablo olarak düşünülebilir. Derive table en büyük avantajı birçok durumda bizi temp tablolardan kurtarmasıdır. Derive table’ın temp tabloya göre performanslı olmasının sebebi her ikisininde oluşturulup kullanılma süresidir.


select s.ProductID from Sales.SalesOrderDetail s right join
(select SalesOrderID,OrderDate,SalesOrderNumber from Sales.SalesOrderHeader) data on s.SalesOrderID=data.SalesOrderID

Yukarıdaki sorguda subquery olarak yazdığımız select sorgusunu tablo olarak kullandık, ve join komutuyla ilişkilendirdik. Derived Table’ın en genel kullanımı bu şekildedir.

Common Table Expression

Geçici olarak bir sorgunun sonucunu tutup daha sonra üzerinde çalışmak için kullanabileceğimiz bir yapıdır. Geçici sorgu sonuçlarını tutarak çok karmaşık sorugları yazabilmemizi kolaylaştırmasına rağmen asıl kullanım alanı öz yinelemeli (recursive) çalışabilme yeteneğidir.


;WITH cteDeneme(İsim,Renk,StokSeviyesi) AS
(
 select Name,Color,SafetyStockLevel from Production.Product
 where StandardCost > 500 and color is not null
)
select * from cteProduct

Common Table Expression için tanımladığımız kolon listesindeki kolon isimleri ile tablodaki kolon adları aynı olmak zorunda değildir. En büyük dezavantajı kendisinden sonra gelen ilk ifade de cte yapısını kullanmak zorunda oluşumuz. Stored procedure gibi akış olan sorgularda yukarıda tanımladığımız cte 'lar procedure'in herhangi bir yerinde tekrar kullanılamaz.

İyi çalışmalar…

Bir cevap yazın

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