Kayıtlar

Group By Rollup

Resim
Merhabalar, Group by rollup operatörü ile gruplama yaptığımız veriler üzerinde hem ara toplam hem de genel toplama erişebiliriz. Sorgumuzda where şartıyla belirtilen ülkelerde bulunan şehirlerdeki toplam müşteri sayısı görüntülenir. Ara toplam olarak her ülkeye ait müşteri sayısı toplanır. Genel toplamda ise bu ülkelerdeki tüm müşteriler toplanır. select Country,City,count(City) from Customers where Country in('Brazil','Venezuela','UK','Spain') group by rollup(Country,City) Sorgumuzun sonuç ekranı: Daha fazla örnek için:  http://blog.sqlauthority.com/2010/02/24/sql-server-introduction-to-rollup-clause/

Group By Cube

Resim
Herkese iyi günler Uzun bir aradan sonra yeniden bloguma sql ile ilgili öğrendiklerimi pekiştirmek için yazmaya devam ediyorum. Bilindiği üzere group by operatörü verileri gruplayıp özet halinde göstermek için kullanılır. Group by cube operatörü de aynı işi yapar fakat group by'dan tek farkı gruplanan verilerin toplamını extra bir satır ekleyerek göstermesi. Örnekle daha iyi anlaşılacağına göre hemen başlayalım. Bu örneğimizde northwind veritabanını kullandım. Şehir bilgisi Buenos Aires,London,Paris veya Sevilla'dan birine eşit olan şehirlerde bulunan toplam müşteri sayısını gösterir. select City as 'Şehir' ,Count(CustomerID) as 'Müşteri Sayısı' from Customers where City in('Buenos Aires','London','Paris','Sevilla') group by City select isnull(City,'Toplam Müşteri') as 'Şehir', Count(CustomerID) as 'Müşteri Sayısı' from Customers where City in('Buenos Aires','London','Paris'...

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

4. Sql Server Sistem Veritabanları Sql Server çalışmasını ve devamlılığını sağlamak amacıyla kendine ait verileri tuttuğu veritabanlarıdır. a) Master Veritabanı Master veritabanında linked server'lar, kullanıcıların bilgileri, sistem stored procedure'leri, sistem fonksiyonları, veritabanları ve dosyalar hakkında bazı bilgiler tutulur.  Bu veritabanının zarar görmesi halinde sql server servisi çalışmaz. Bu veritabanının düzenli olarak ve yeni bir veritabanı oluşturulduktan sonra, veritabanının özelliklerini değiştirdikten sonra, kullanıcı oluşturduktan sonra yedeğinin alınması önerilir. b) Model Veritabanı Model veritabanı adı üzerinde yeni oluşturacağımız veritabanları için bir model niteliğindedir. Veritabanı oluşturulurken model veritabanının kopyası oluşturulur, sadece isim gibi özellikleri değiştirilir. Model veritabanında oluşturulan tablo, stored procedure veya fonksiyon bundan sonra oluşturulan bütün veritabanlarına otomatik olarak eklenir. c) MSDB Veritabanı...

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...