msHOWTO

26 Nisan 2012 Perşembe

MSSQL Select İfadesi (T-Sql)


Merhaba arkadaşlar.Bu makalemde sizlere T-Sql olarak select ifadesini anlatacağım.Öncelikle T-Sql nedir ondan bahsetmek istiyorum.Dünya üzerinde standart hale getirilmiş Sql kullanımı vardır.Bu sql standartı bütün veri tabanlarında kullanılmaktadır.Fakat bir çok veri tabanı sistemleri bu standartın yetmediğini görüp kendilerine göre ekleme yapmışlardır.İşte microsoft da bu standart sql e ek bir çok ekleme yaparak T-Sql i üretmiş ve kullanmaktadır.Sql ile ilgili makalelerimde ağırlıklı olarak T-Sql i kullanacağım.

Bu kısa ön bilgiden sonra gelelim asıl konumuza arkadaşlar.Öncelikle select ifadesi sql standartlarında olan bir ifadedir.Fakat bazı yerlerde T-Sql e ait kullanımları da mevcuttur.Peki nedir select ? Ne işe yarar ? Kelime anlamından da yola çıkarsak eğer seçim yapmak için kullanılır genelde.Seçim yapmak nedir ? Veri tabanınızda bir çok tablonuz ve bu tablolarınızda da bir sürü kayıtlar mevcut.Bu kayıtları görebilmek , bu kayıtlar içinde filtreleme yaparak istediğiniz koşuldaki kayıtları listelemek veya birden fazla tablonuzdaki kayıtları birleştirerek ortak ve anlamlı listeleme raporlama yapmak gibi bir çok işlem için select kullanılır.Yani kısaca ağırlıklı olarak kayıtları istediğiniz şekilde düzenleyerek listeleyip görmeniz için select ifadesini kullanmanız gerekmektedir.Hadi gelin örnekler üzerinden select ifadesini inceleyelim ...

Not : Tüm sorgularımı Microsoft'un örnek olarak vermiş olduğu Northwind database i üzerinde yapacağım arkadaşlar.http://www.microsoft.com/download/en/details.aspx?id=23654 linkinden sizde indirip kurup kullanabilirsiniz.

Select ifadesinin genel kullanımı : select [gösterilecek kolonların adı] from [kayıtların olduğu tablo adı]

select CompanyName ,ContactName ,ContactTitle  from Customers

Yukaridaki kullanımda Customers tablosundaki 3 adet kolondaki kayıtlar listelenmektedir.Fakat bu şekilde kullanılırsa gösterilen listede kolonların başlığı kolonları adı olur.Fakat bunu bizim anlayacağımız hale getirmek mümkündür.

select CompanyName as Firma,ContactName as Kişi,ContactTitle as Ünvan from Customers

select CompanyName Firma,ContactName Kişi,ContactTitle Ünvan from Customers

select CompanyName 'Firma',ContactName 'Kişi',ContactTitle 'Ünvan' from Customers 

select CompanyName "Firma",ContactName "Kişi",ContactTitle "Ünvan" from Customers 

select CompanyName [Firma Adı],ContactName [Kişi],ContactTitle [Ünvan] from Customers

Yukarıdaki 4 farklı kullanımda da kolonlara takma isim verme işlemi yapılır.Fakat 4.kullanımda önemli bir nokta var eğer vereceğiniz takma ad yani alias arasında boşluk varsa ya [] içerisinde ya "" içerisinde yada '' içerisinde yazılmak zorundadır.Microsoft [] içerisindeki kullanımı tavsiye etmektedir.

select FirstName + ' ' + LastName 'Ad Soyad' from Employees

Yukarıdaki kullanıma literal kullanma denir.Yukarıdaki ifade Ad ve Soyadı kolonlarını birleştirip içerisindeki verileri tek kolonda gösterir.

Kısaca giriş yaptıktan sonra select ifadesinin kullanım amaçlarını anlatırken filtreleme işleminden bahsetmiştim.Aşağıdaki örnek de filtreleme işlemi yapar.

select CompanyName,ContactName,ContactTitle,Country
 from Customers
 where Country='Germany'

Yukarıdaki kullanımı incelediğimizde filtreleme için where ifadesinin kullanıldığını ve bu ifadeden sonra da boolean bir ifade kullanıldığını yani bir koşul belirtildiğini göreceğiz.Yukarıdaki örnekte ülkesi almanya olan müşterilerin firma adı,iletişim adı , ünvanı ve ülkesi bilgilerini getiren bir sorgu vardır.

select CompanyName,ContactName,ContactTitle,Country
 from Customers
 where Country='Germany' or Country='Usa' and ContactTitle='Sales Manager'

Yukarıdaki gibi birden çok koşula göre filtreleme işlemi yapılabilir.Fakat burada bilinmesi gereken nokta C# taki gibi and operatörünün baskın olmasıdır. Bu bilgiye göre yukarıdaki sorguya aşağıdaki gibi öncelik sırası belirtilmesi gerekmektedir.

select CompanyName,ContactName,ContactTitle,Country
 from Customers
 where (Country='Germany' or Country='Usa') and ContactTitle='Sales Manager'


Bir başka kullanıma göz atalım .

select CompanyName,ContactName,ContactTitle,Country
 from Customers
 where Country in ('Germany','Usa','Uk')

Şeklinde ki kullanım aslında , 

select CompanyName,ContactName,ContactTitle,Country
 from Customers
 where Country='Germany' or Country='Usa' or Country='Uk'

Kullanımla aynıdır.Yani ülkesi almanya , amerika veya ingiltere olanları getir anlamındadır.

select CompanyName,ContactName,ContactTitle,Country
 from Customers
 where Country not in ('Germany','Usa','Uk')

Bu kullanımda bir öncekinin tam tersi verileri geriye döndürür.Dikkat ederseniz NOT ifadesi vardır.Not ifadesinden sonra belirtilenin tersi sonuç döner.

Peki northwind veri tabanında Customers tablosundaki bulunan müşterilerin hangi ülkeden olduğunu görmek istediğimizde tekrarlı olarak yani aynı ülkeden birden fazla müşteri varsa o kadar aynı ülke göreceğiz.Faka bu yanlış bir sonuçtur.Bu ülkelerin tekrarsız olarak listelenmesi gerekmektedir.Bu durumun çözümü de ;

select distinct Country from Customers

Yukarıdaki gibi DISTINCT ifadesiyle kolaylıkla çözülür.

Peki başka bir senaryo daha üretelim.Birim fiyatı 30(dahil) ve 50(dahil) arasında olan ürünleri görmek istiyorsak eğer.

 select ProductName,UnitPrice from Products
 where UnitPrice>=30 and UnitPrice<=50

Şeklinde bir ifade yazmamız gerekir.Bu sorguyu daha kolay bir şekilde yazabiliriz.Bunun için where ifadesine between ifadesi eklememiz gerekir.

select ProductName,UnitPrice from Products
 where UnitPrice between 30 and 50

Dikkat edilmesi gereken nokta girilen ilk değer ikinci değerden küçük olması gerekir.

Bir başka senaryo düşünerek başka filtreleme şekli görelim.Diyelim ki büyük bir firmanın veri tabanından sorumluyuz.Bir gün kampanya yapacaklarını söylediler ve kampanya da müşterilerimiz arasında isminin baş harfi T ile başlayanlara 50 Tl indirim çeki vereceğiz dediler.Dolayısıyla bizden baş harfi T ile başlayan müşterilerinin listesini istediler.Bunun için Like ifadesi ile filtreleme işlemi yapmamız yeterli olacaktır.

*** Like ifadesinin farklı kullanım şekillerini hep kampanya üzerinden anlatacağım.

select companyName from Customers
where CompanyName like 'T%'

Bir başka kampanyada ise T ile başlayıp S ile biten müşterilerimize 50 Tl hediye çeki verilecektir.Bunun için de ,

select companyName from Customers
where CompanyName like 'T%s'




Bir başka kampanyada ise baş harflerinde a,f,k ve h olan müşterilerimize 50 Tl hediye çeki verilecektir.Bunun için de ,

select companyName from Customers
where CompanyName like '[afhk]%'

Bir başka kampanyada ise baş harflerinde a,f,k ve h olan ve son harfi a ie s arasında olan müşterilerimize 50 Tl hediye çeki verilecektir.Bunun için de ,

select companyName from Customers
where CompanyName like '[afhk]%[a-s]'

Bir başka kampanyada ise baş harflerinde a,f,k ve h olan ve sondan 3. harfi a ie s arasında olan müşterilerimize 50 Tl hediye çeki verilecektir.Bunun için de ,

select companyName from Customers
where CompanyName like '[afhk]%[a-s]__'

Bir sonraki makalemde görüşmek dileğiyle arkadaşlar ...


Hiç yorum yok:

Yorum Gönder