Kayıtlar

Haziran, 2013 tarihine ait yayınlar gösteriliyor

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

3. Startup (Başlangıç) Procedure'leri Bu özellik sayesinde Sql server servisi her başladığında çalışan bir stored procedure tanımlayabiliriz. Sysadmin rolüne sahip olmamız gerekir. Startup stored procedure'leri kullanabilmek için aktif edilmesi gerekir. Aktif edilmeden önce aşağıdaki sorguyla şu anki durumu kontrol edilir: select name, value, value_in_use from sys.configurations where name like 'scan for startup procs'; Aktifleştirmek için aşağıdaki sorgu yazılır: sp_configure 'scan for startup procs',1 reconfigure go sp_configure 'show advanced options',1 reconfigure Daha sonrasında server restart edilmelidir. Bir startup procedure örneği vermek istersek: --başlangıçta çalışacak (yani server her restart edildiğinde) stored procedure örneği: --kayıtları tutmak için tablo: create table master.dbo.SqlRestartLog ( id int identity(1,1), StartTime datetime ) create proc dbo.sp_InsertToSqlRestartLog as insert into master.dbo.SqlRestar

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

Resim
Sql Server Configuration Manager aracının diğer önemli bir tabı ise Sql Server Network Configuration altında bulunan Server ve Client arasında iletişim kurarken kullanılacak olan protokollerle ilgili işlemleri yapabileceğimiz Protocols seçeneğidir. Client ile Server arasındaki iletişim şu şekilde gerçekleşir: Client uygulama Sql Server'a bağlantı kurmak için driver'a istek yollar. Driver uygun protokolü belirlemesi için NetLibs'i çağırır. Netlibs en uygun protokolü seçerek Sql Server'a gönderir. Sql Server tarafındaki netlibs ise Clienttan gelen isteği alarak Sql Server'a iletir. Sql Server, Client ile haberleşmek için aşağıdaki protokolleri kullanır: Shared Memory Named pipes TCP/IP VIA ( Netlibs: Protokollerin tamamını kapsayan kütüphane ) 2.DAC (Dedicated Administrator Connection) Aracı Sql Server instance'ına erişilemediğinde ( genellikle sistem kaynaklarını gereksiz yere tüketen işlemlerden dolayı ) bağlantı kurabilmek için Sql Server 2

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ı