SQL Server İleri Sorgulama Teknikleri

22 Ocak 2017 Pazar

SQL Server’da az kullanılan ama büyük kolaylıklar sağlayan bazı komutlar mevcut. Fırsat bulabilirsem, başka bir yazıda sorgu sonuçlarının özetlenmesi ve Windows fonksiyonlarının kullanımından da bahsederim;

-Table sample:  Rastgele sayıda kayıt elde etmemizi sağlayan komuttur. Direkt olarak Sql Server'ın verilerinin tutulduğu page'lerden okuma yapar ve ne kadar sayfa okunacağı parametrede belirtilir. percent ve rows olmak üzere 2 adet parametremiz vardır.

SELECT* FROM DEPARTMENTS
SELECT* FROM DEPARTMENTS TABLESAMPLE(10 percent)
SELECT* FROM DEPARTMENTS TABLESAMPLE(1000 rows)

Percent, sonuç setindeki kayıtların yüzde kaçının okunacağını belirtir. Örneğin tablomuzda 120 bin civarı kayıt vardır ve yukarıdaki 2. sorgu her çalıştırıldığında 12 bin, 13 bin civarı farklı sayıda kayıt döner.

-Pivot tablo: Pivot komutu Oracle ve Ms SQL gibi SQL tabanlı databaselerin hepsinde vardır.

Normalizasyon kurallarında içinde tasarlanmış tablolar olap şeklinde sorgulamalara izin vermeyebilir. Bu tür durumlar devreye pivot sorgulama girer ve detaylı analiz imakanı verir. Pivot kısaca ne yapar ?? Tablo da yapısı geregi alt alta sıralanmış olan kayıları yanyana yani sütunlar şeklinde göstermeye yarar.

SELECT*
FROM (
SELECT
YEAR(TARIH) [Yıl],
MONTH(TARIH) [Ay],
TOPLAM
FROM DEPARTMENTS) TableDate
PIVOT (
SUM (TOPLAM)
FOR [AY] IN (
[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12]
)
) PivotTable

-Unpivot tablo: Pivot işleminin tam tersini yapar. Onun için örnek vermiyorum.

-Except komutu:  Except operatörü de iki farklı sorgu sonucunun karşılaştırırken intersect operatöründen farklı olarak sadece ilk sonuç setinde olup ikici sorgu sonucunda olmayan kayıtları listelememizi sağlamaktadır.  Elde edilen sonucu NOT in ve Not exists operatörlerini kullanarak yazmak mümkündür. Intersect’de yazdım ona bakabilirsiniz.

SELECT PRODUCTID
FROM DEPARTMENTS
EXCEPT
SELECT PRODUCTID
FROM WORKORDER

-Intersect komutu: Intersect operatörü adında anlaşılacağı üzere iki farklı sorgu sonucunun kesişimini elde etmek için kullanılmaktadır. Yani iki sorgu sonucunu insersect operatörü ile birleştirdiğimizde her iki sorgu sonucunda da dönen kayıtlar listelenecektir. İki sorgu sonucunu iki farklı küme ile temsil edersek intersect operatörünü şu şekilde gösterebiliriz.

SELECT PRODUCTID
FROM DEPARTMENTS
INTERSECT
SELECT PRODUCTID
FROM WORKORDER

Bu sorgulara in veya exists operatörleri ile de aynı sonuca ulaşılabilir.

SELECT PRODUCTID
FROM DEPARTMENTS d
WHERE EXISTS (SELECT top 1
FROM WORKORDER wo where d.PRODUCTID=wo.PRODUCTID)


Share/Bookmark

0 comments :