SELECT deyimi veritabanındaki bir veya birden fazla tablodan veri almak için kullanılır. Örneğin web sitemizde veritabanında bulunan herhangi bir bilgiyi (mesela bir üyenin detaylı bilgilerini) sayfada göstermek istersek, ilgili tablo(lar)daki verileri SELECT deyimi ile alırız. Bu işleme sorgulama denir.
SQL in temel kullanım amacı verilerin depolanması ve gerektiğinde verilee erişebilmesidir. Select ise verilere ulaşabileceğimiz en basit komuttur. Basitçe kullanımı
select NationalIDNumber,LoginID,JobTitle
from HumanResources.Employee
yukarıdaki sorguyla sql’e HumanResources.Employee tablosundan NationalIDNumber,LoginID,JobTitle alanlarında bulunan bilgilere ulaşmak istediğimizi belirtiyoruz.Ekran çıktısı aşağıdaki gibi olacaktır.
Fromdan sonraki kısım iki alandan oluşmakta. HumanResourcesve Employee bunların ilki şema alanı ikinci kısım ise tablo adıdır.
Şemaların ne olduğuna daha sonra detaylı değineceğiz.
Eğer HumanResources.Employee tablosundaki tüm alanları görmek isteseydik.
select *from HumanResources.Employee
şekilinde yazabilirdik. Burdaki * joker karakterdir. Tablodaki tüm alanları tek tek yazmak yerine yıldız ile hepsinin görüntülenmesini sağlayabiliriz.
Yıldız joker karakterinden mümkün olduğunca kaçmalıyız. Bu bize hem performanssız bir sorgu yazmamıza hemde alanlarda bir değişiklik olduğunda ortaya çıkan sonucun farklı görünmesine yol açacaktır.
Eğer sorgu sonucunda gelen alan adlarını düzenlemek istersek
selectBusinessEntityID as ‘personel no’,LoginID KullaniciAdi,BirthDate as[doğum tarihi],gender cinsiyet,‘medeni durumu’=MaritalStatus
from HumanResources.Employee
gibi değişik yöntemleri kullanabiliriz. Bence bir yöntem seçin ve hep onu kullanın ben genellikle BusinessEntityID as ‘personel no’ şeklinde yazıyorum.
Sorgu sonuçlarının koşullarla sınırlandırılması
Select’i herhang bir koşulla sınırlandırmadığınız sürece tablodki tüm verileri getirecektir. Bu bazen istenen bir durum olsada çoğu zaman istenmez. Tabloda milyonlarca kayıt varsa listelenmesi cok zaman alacak.
select * fromperson.Person
where BusinessEntityID=5burda BusinessEntityID alanı 5’e eşit olan kayıtlar gelecektir.select * fromperson.Person
where LastName=‘adams’
burda ise LastNamealanı adams olan kayıtlar gelecektir.
Sql de string değerleri aratacaksak ‘’ içinde yazmalıyız yoksa tablo adı veya kolon gibi davranabilir. İnteger değerlerde böyle bir zorunluluğumuz yok çünkü tablo veya kolon adları integer ile başlayamaz
select * fromperson.Person
where LastName=‘adams’and Title=‘mr.’
Burda title alanı mr. Olmalı ve lastname alanı adams olmalı
And koşulu her iki kuralıda true değer dönen kayıtları gösterir.
select * fromperson.Person
where LastName=‘adams’orTitle=‘mr.’
Burda title alanı mr. Olmalı veya lastname alanı adams olmalı
or koşulu her iki kuraldan biri true değer dönen kayıtları gösterir.
select * fromperson.Person
where not LastName=‘adams’
not koşulu lastname alanı adams olmayan kayıtları getirir
Sql Öncelik sırası
Sqlde de matematikde olduğu gibi öncelik sıralaması vardır.
Şeklindedir.
SELECT ProductID, Name,Color,ListPrice FROM
Production.Product
where Color=‘silver’ and(ListPrice>200 and ListPrice<=1000)
listprice 200den büyük ve 1000den küçük ve color da slver olan kayıtları gösterir
LIKE OPERATÖRÜ
Bazen veritabanımızda yer alan verilerin içeriğinin bir kısmını biliriz. Ya da bir kısmı benzer olan verilerin listelenmesini isteyebiliriz. Örneğin açıklamalardan oluşan bir veri içinde aynı kelimelere sahip olan verilerin listelenmesini isteyebiliriz. Çeşitli joker karakter yardımları ile (bu yazımda değineceğim) istediğimiz kriterdeki verilerin listelenmesini sağlayabiliriz. Tüm bunlar için LIKE deyimini kullanırız. LIKE deyimi ile birlikte kullanacağımız joker karakterler % (yüzde) ve _ (alt çizgi) karakterleridir. % (yüzde) karakteri birden fazla karaktere karşılık gelen ve sonrası veya o aralık ne olursa olsun anlamına gelen bir joker karakterdir. _ (alt çizgi) ise tek bir karaktere karşılık gelmektedir. Şimdi bir kaç örnekle daha net anlayacağız durumu :
Pratik ve esnektir.
SELECT ProductID, Name,Color,ListPrice FROMProduction.Product
where name LIKE‘B%’
Name alanı B ile başlayan tüm kayıtları göster demektir. % joker karakterdir bden sonrasi önemli değildir.
- _ gene joker karakterdir. 1 karakteri ifade eder
- [] özel bir karakteri ifade eder
- [^] özel bir karakter olmadığını ifade eder.
SELECT ProductID, Name,Color,ListPrice FROMProduction.Product
where name LIKE‘a%’ or name LIKE‘B%’ or name LIKE‘c%’ or name LIKE‘d%’
yerine aşağıdaki gibi yazabiliriz
SELECT ProductID, Name,Color,ListPrice FROMProduction.Product
where name LIKE‘a%’ or name LIKE‘B%’ or name LIKE‘c%’ or name LIKE‘d%’
SELECT ProductID, Name,Color,ListPrice FROMProduction.Product
where name LIKE ‘[abcd]%’
veya
SELECT ProductID, Name,Color,ListPrice FROMProduction.Product
where name LIKE‘a%’ or name LIKE‘B%’ or name LIKE‘c%’ or name LIKE‘d%’
SELECT ProductID, Name,Color,ListPrice FROMProduction.Product
where name LIKE ‘[a-d]%’
şeklinde de yazabiliriz.
Joker karakterlerden birini aramak istersek
where name LIKE ‘%/%%’ escape ‘/’
escape ‘/’ bize / karakterinden sonra aratacağımız karakter var demektir. /% ile arama yaptığımız alandaki aranacak krakter % olduğunu belirtir.
Aynı şekilde olumsuzları da olmaktadır.
SELECT ProductID, Name,Color,ListPrice FROMProduction.Product
where name not LIKE ‘[a-d]%’
name alanı a,b,c,d ile başlamayan kayıtları gösterecektir.