Kayıtlar

sql server etiketine sahip yayınlar gösteriliyor

Grouping Sets Fonksiyonu

Resim
Sql Server 2008 ve sonrasında gelen sürümlerde karşımıza çıkan Grouping sets fonksiyonu ile aynı veriler üzerinde birden fazla gruplama işlemi yapabiliriz. Eskiden group by ve union all ifadeleriyle yapılan bu işlem grouping sets ile daha kolay ve anlaşılır hale gelmiştir. Örneğimizde de görüleceği üzere ilk önce CustomerId' ye göre gruplanır. 2. etapta sırası ile ilk önce Yıla göre sonrasında ProductId'ye göre gruplama yapılır: select CustomerID,ProductID,YEAR(OrderDate) as [Year],sum(Quantity) as [Quantities] from Orders o inner join [Order Details] od on o.OrderID=od.OrderID where CustomerID like 'A%' group by GROUPING SETS( (CustomerID,YEAR(OrderDate)), (CustomerID,ProductID)) Order by CustomerID Grouping sets içerisindeki parametrelere (CustomerID)' yi eklersek; yıla ve ProductID' ye göre grupladıktan sonra CustomerID için genel toplam verir. Parametrelere boş parantezi de eklersek ( ) , sorgu sonucundaki tüm alanları ( sum(Quantity) ) toplar, ...

INTERSECT komutu

Intersect komutu 2 farklı sorgudan dönen ortak kayıtları listelemek için kullanılır. In ve Exists komutları ile de aynı sonuç elde edilebilir. Aslında inner join işlemlerinde de 2 sorgunun ortak olan kayıtları listelenir. Inner joinde yapmamız gereken tek işlem distinct komutunu sorgumuza eklemek. Aşağıdaki farklı komutlarla yazılan sorgularımızı çalıştırdığımızda hepsinden 238 adet kayıt döndüğünü görürüz. 1) Intersect ile: select ProductID from Production.Product intersect select ProductID from Production.WorkOrder 2) In ile: select ProductID from Production.Product where ProductID in(select ProductID from Production.WorkOrder) 3) Exists ile: select ProductID from Production.Product p where exists(select top 1 1 from Production.WorkOrder wo where p.ProductID=wo.ProductID) 4)Inner join ile: select distinct p.ProductID from Production.Product p inner join Production.WorkOrder wo on p.ProductID=wo.ProductID

EXCEPT Komutu

Aslında Not in veya Not exists komutları ile de aynı sonucu alacağımız bir komuttur Except. 2 farklı sorgudan dönen sonuç kümelerini karşılaştırarak sadece ilk belirtilen sorgu sonucunda olan fakat ikinci sorgu sonucunda olmayan kayıtları listeler. Bir örnek vermek istersek Product tablosunda olan fakat WorkOrder tablosunda olmayan kayıtları 3 farklı komutla listeleyebiliriz. 1) Except ile: select ProductID from Production.Product except select ProductID from Production.WorkOrder 2) Not in ile: select ProductID from Production.Product where ProductID not in(select ProductID from Production.WorkOrder) 3)Not exists ile: select ProductID from Production.Product p where not exists(select top 1 1 from Production.WorkOrder wo where p.ProductID=wo.ProductID)

UNPIVOT Table

Resim
Pivot table konumuzun devamı olan unpivot table işlemini incelemeye başlıyoruz. Eğer pivot table oluşturma, bu tabloları kullanma işlemi sık sık tekrarlanıyorsa performans sağlanması ve zaman kazandırması açısından pivot table işleminin sonucu başka bir tabloya yazılır, artık sorgulama bu tablo üzerinden yapılır. Bu gibi durumlarda bazen de pivot tablonun eski haline döndürülmesi istenebilir ve o zaman devreye unpivot table işlemi girer. Hemen örneğimize başlayalım. Pivot table konumuzdaki örnek sorgumuz üzerinden gideceğiz. Pivot table işleminin sonucunun tutulacağı tabloyu oluşturuyoruz: create table pivottable(Az int, Ca int, Tx int); Sorgu sonucunu tabloya yazıyoruz: insert into pivottable select * from ( select sp.StateProvinceCode from Person.Address a inner join Person.StateProvince sp on a.StateProvinceID=sp.StateProvinceID )k PIVOT ( count(StateProvinceCode) for StateProvinceCode IN([AZ],[CA],[TX]) ) AS pvt select * from pivottable Şimdi unpivot işlemin...

PIVOT Tablo

Resim
Group by ifadesi ile verilerimiz satır bazında gruplanır, bi'nevi özetlenir. Bazı durumlarda bu satır bilgilerinin sütuna dönüştürülmesi gerekebilir. Bu işlem için sorgu sonucunda dönen kayıt setinin satırlarını sütuna çevirme tekniğine pivot tablo denmektedir. Örneğin aşağıdaki sorguda eyalete göre gruplama yapıp AZ,CA,TX kodlu eyaletlerde bulunan personel sayısının görüntüledik.  (veritabanı adventureworks) select sp.StateProvinceCode,count(sp.StateProvinceCode) Adet from Person.Address a inner join Person.StateProvince sp on a.StateProvinceID=sp.StateProvinceID where sp.StateProvinceCode in ('AZ','CA','TX') group by sp.StateProvinceCode Sorgumuzu pivot tabloya çevirme işleminde ise öncelikle gruplama ifadelerini sorgumuzdan çıkartıp, sorgumuzu bir altsorgu haline getiririz. select * from ( select sp.StateProvinceCode from Person.Address a inner join Person.StateProvince sp on a.StateProvinceID=sp.StateProvinceID )k Daha sonrasında yuka...

Table Sample Komutu

Table sample rasgele 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. (veritabanı olarak AdventureWorks'ü kullanıyorum.) 1) select * from Sales.SalesOrderDetail; 2) select * from Sales.SalesOrderDetail TABLESAMPLE(10 percent); 3) select * from Sales.SalesOrderDetail 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. 3. sorgudaki 1000 rows ifadesiyle  her çalıştırıldığında 1000 kayıt döneceği kesin değildir. (rows değeri ne kadar az olursa o kadar az kayıt döner.) 3. sorgu 4 defa çalıştırıldığında dönen kayıt sayıları: Çalışma Dönen kayıt 1 809 2 812 3 1183 ...

Sql Server Database Engine Servisinin Konfigüre Edilmesi ve Yönetilmesi-1

Resim
Sql Server 2012'nin kurulumu ile alakalı kısımları geçip direkt olarak database engine'in yönetiminden bahsetmek istiyorum. (İstenirse kurulum da anlatılabilir.) Microsoft güvenlik sebebiyle Sql Server'ın birçok özelliğini varsayılan olarak pasif yapmıştır. Sql Server'ın kurulumu tamamlandıktan sonra yapmamız gereken şey instance'ımızı gereksinimlerimize göre konfigüre etmektir. Bu işlemleri yapmak için çeşitli araçlar ve Sql Server içinde bulunan bazı stored procedure'ler kullanılmaktadır. Bu yazı ve ilerleyen yazılarda bahsedilen işlemler anlatılacaktır. 1. Sql Server Configuration Manager Aracı Başlat-> Programlar-> Sql Server klasörü altında bulunur aracımız. Sql Server Services seçeneğini seçerek makinemizde kurulu tüm instance'lara ait servisleri görebiliriz. Servislerle ilgili herhangi bir işlem yapmak için servis üzerinde sağ tuşla özelliklerine ulaşırız. Açılan menü aşağıdaki gibidir: Log on tabında  (servisi çalıştı...