SQL With Kullanımı With Using SQL Sayfalama Mantığı

SQL With Kullanımı With Using SQL Sayfalama Mantığı
10 Nisan 2016SQL

SQL View işlemine benzer bir şekilde kullanılan With sorgusu birden çok yerde kullanılacak sorguların ya da aynı sorguların teker teker yazılmasını önlemek amacıyla kullanılmaktadır. Örnek olarak verirsek A,B,C,D şeklinde 4 tane sütunumuz olduğunu düşünelim. Bu 4 sütundan sorgu olarak (((A/B)*100)/2.47 + (D*C)) gibi bir alanı birkaç farklı yerde kullanmamız gerekebilir. mesela her sütunu bu sorgudaki değere bölmemiz gerekebilir. bunun için şöyle bir sorgu kullanmamız gerekir.

	SELECT A/(((A/B)*100)/2.47 + (D*C)) , B/(((A/B)*100)/2.47 + (D*C)),C/(((A/B)*100)/2.47 + (D*C)).... FROM tablom WHERe ....

bu şekilde bir sorgu yazmamız gerekecek. Burada sütunların A,B gibi tek karakterler değil de oldukça uzun olduğunu -execute_man_hour,project_currency - gibi olduğunu düşününce büyük sorgularda karışıklıklar çıkarabiliyor. With kullanarak bunu biraz daha basite indirgeyebiliriz. Aşağıdaki sorgu bunun için basit bir örnek

	With tablom as ( SELECT a,b,c,d,(((A/B)*100)/2.47 + (D*C)) as sutun FROM tablom WHERE ... )
	SELECT a/sutun,b/sutun,c/sutun,d/sutun FROM tablom 

bu şekilde sorgumuzu basitçe kullanabiliyoruz. gördüğünüz gibi üst tarafta with içerisinde where , group by , max gibi kullandığınız bütün terimler sizin için geçici bir view oluşturur. alt tarafta sadece sorgu ile üstte oluşturmuş olduğunuz geçici view'i çalıştırabilirsiniz. With komutu sayfalama mantıklarında da oldukça işe yarayabiliyor. Örnek verirsek yazilar adlı bir tablouz olduğunu düşünelim. bu tablomuzda yazi,yazar_id,id,tarih gibi sütunlarımız var. Ve biz belli değerler arasındaki kayıtları istiyoruz. Tarihe göre tersten sıralı bir şekilde gönderdiğimiz parametreler ile 10. ve 20. kayıtlar arasını alalım. Aynı şekilde yazılar tablomuzdaki yazar_id i de yazar ismine çevirelim.

	With tablom as ( SELECT id,yazi,tarih,(SELECT yazar FROM yazarlar y1 WHERE y1.id=yazar_id),ROW_NUMBER() OVER (ORDER BY tarih DESC) as sira FROM yazilar)
	SELECT * FROM tablom  WHERE sira between 10 and 20;

yukarıdaki sorguda row_number kullanarak önce satırları tarihe göre sıralayıp her satıra bir satır numarası verdik ve bunları sira adlı bir sütuna atadık. sonrasında ise bu sıralardan 10.ve20. kayıtlar arasını getir dedik. Bunları parametreye bağlayıp 10 and 20 yerine @ilk and @son şeklinde verip bu parametreleri de gönderdiğimiz programlama diliyle dinamik olarak bağlayabiliriz. 

3261 Görüntülenme sayısı

BİR YORUM YAZIN

Bilgileriniz Güvende!E-Posta adresiniz ve diğer bilgileriniz kimseyle paylaşılmayacaktır.