29 Ağustos 2014 Cuma

Sql de Veri Tabanı Sorgulama Nasıl Yapılır ?

                  Sql Komutları ile Veritabanı Sorgulama

Bu bölümde temel Sql komutları ile veritabanını sorgulayarak veri alma, sıralama, çift kayıtları elema, sonuçların formatlarını değiştirme işlemlerinin nasıl yapıldığını inceleyeceğiz.
Select ifadesini kullanmadan önce hangi veritabanı ve tablolar ile işlem yapacağımızı bilmeliyiz. Verilerle işlem yapmadan önce bazı komutlarla bu verilerin çekilmesi gerekmektedir. Bu komutlara sql ifadesi diyoruz. Select ifadesi ile seçmek istediğiniz kolon ve satırları belirtebilirsiniz. 

Select ifadesinin kullanımı :
Select ifadesi veritabanından bilgi çekmek için kullanılır.
Select ifadesi ile istediğiniz kolan ve satırları belirtebilirsiniz.
  • Select ifadesi istenen satırları bir liste şeklinde verir.
  • WHERE ifadesini kullanarak sorgunuzu filtreleyebilir ve sadece sizin kriterlerinize uygun satırların sorgu sonucu olarak gelmesini sağlayabilirsiniz. Bu kriterler lojik ifadeler, karşılaştırmalar olabilir.
  • FROM ifadesi bu verilerin alınacağı tablo isimlerini belirtmemizi sağlar.

Kolonların belirlenmesi :
Sorgu sanucunda tablodaki tüm kolonlar değilde sadece işinize yarayacak kolonların gelmesini isteyebilirsiniz. Bu durumda istediğiniz kolanların herbirinin adını belirmek zorundasınız.
Select’den sonra kolon isimleri, local değişkenler, hesaplanmış ifadeler belirtebilirsiniz. Yani veritabanından çekilen kolon üzerinde herhangi bir işlem yaptırarak listelettirebilirsiniz. Örneğin veritabanımızda ürün fiyatları olsun. Fakat bizim ürün fiyatları yanında KDV’sinede ihtiyacımız oldu fakat bu bilgi veritabanında yok. Bu durumda Select ifadesi ile veriyi çekme aşamasında iken bunuda hesaplanmış ek bir kolon olarak çekebiliriz. Select ifadesinden sonra sadece kolon isimleri bulunmak zorunda değil.
Kolon isimlerini virgül (,) ile ayırmak zorundayız. Veriler listelenirken kolon bilgileri verdiğimiz sırada gelir. Performan kazanmak için kolon kullanımına alışmalıyız. * kullandığımız takdirde tablodaki tüm alanlar ihtiyacıomız olsun veya olmasın gelecektir. Bu durum ise bize performans kaybı sağlayacaktır.
Aşağıdaki örnekte employees tablosunda belirttiğimiz kolonları çekiyoruz. Bu tablo Northwind veritabanında bulunmaktadır.
ÖRN:  SELECT employeeid, lastname, firstname, title
FROM employees

SNÇ:
Where ifadesinin kullanımı :
Where ifadesi ile istediğimiz satırları alabiliriz. Where ifadesinden sonra belirttiğimiz kriterler sınırsız sayıda olabilir.
Where ifadesinden sonra kriter olarak kullandığımız verinin tipi char, nchar, varchar, nvarchar, text, datetime ve smalldatetime ise tek tırnak () kullanmalıyız.
Where ifadesi ile normalde fazla sayıda gelen satır sayısını azaltmış oluruz. Where ifademiz tutarsız ise tüm satırlar yine gelecektir.
ÖRN : SELECT employeeid, lastname, firstname, title
FROM employees
            WHERE employeeid=5

SNÇ :

Sonuç olarak tüm kayıtlarımız arasından sadece employeeid’si 5 olan veriler geldi.
Veri Filtreleme :
Zaman zaman ihtiyacınız olan verileri filtrelemek isteyebilirsiniz. Verilerinizi Where ifadesinden sonra kullanacağınız bazı koşullar ile filtreleyebilirsiniz. Bu koşullar şunlardır;
* Karşılaştırma operatörleri             =, >, <, >=, <=, <>
* String karşılaştırmalar                 LIKE ve NOT LIKE
* Lojik operatörler                        AND, OR
* Lojik operatörler (Negatif)           NOT
* Değer aralıkları                          BETWEEN ve NOT BETWEEN
* Değer listeleri                           IN ve NOT IN
* Bilinmeyen değerler          IS NULL ve IS NOT NULL
Karşılaştırma operatörlerinin kullanımı :
Karşılaştırma operatörleri ile tablodaki bir veri ile belirlenmiş bir veri veya hesaplanmış veri karşılaştırılabilir. Fakat karşılaştırmak istediğiniz alan ve verinin tipleri aynı olmalıdır. Sayısal bir ifadeyi tarih ifadesi ile karşılaştıramazsınız. Burada kullanılan operatörler;
=        Eşittir
>        Büyüktür
<        Küçüktür                
>=      Büyük veya eşittir
<=      Küçük veya eşittir
<>      Eşit değildir
NOT ifadesinin kullanımı tavsiye edilemez. Çünkü kullanıldığı takdirde tüm tablo değerlendirilir ve veri akışının yavaş olması problemi yaşanır.
ÖRN:  SELECT lastname, city
FROM employees
WHERE country=’USA’

SNÇ :

Country alanı USA olanların listesi alındı. Dikkat edilirse country alanı string bir ifade olduğu için USA ifadesi tek tırnak içine alındı. Bu dikkat edilmesi gereken bir noktadır.
ÖRN : SELECT orderid, customerid 
FROM orders
            WHERE orderdate < ‘8/1/96’
SNÇ :
String karşılaştırmaların kullanımı :
Satırlarımızdaki verileri LIKE ifadesi ile bazı wildcard’ları kullanarak filtreleyebiliriz. LIKE ifadesini sadece char, nchar, varchar, nvarchar, binary, varbinary, smalldatetime ve datetime veri tiplerinde kullanabiliriz. Bu wilcardlar aşağıdaki gibidir;
%                 0 veya daha fazla karakterli string
_                  tek bir karakter
[]                 belirtilenler arasından tek bir karakter
[^]               belirtilenler arasında olmayan tek bir karakter
Bu wildcarların LIKE ile kullanım örnekleri aşağıdaki gibidir;
LIKE ‘BR%’      BR ile başlayan tüm isimler
LIKE ‘Br%’      Br ile başlayan tüm isimler. Büyük küçük harf farkı
LIKE ‘%een’    een ile biten tüm isimler
LIKE ‘%en%’   en karakterlerini içeren tüm isimler
LIKE ‘_en’       en ile biten tüm 3 karakterli isimler
LIKE ‘[CK]%’   C veya K ile başlayan tüm isimler
LIKE ‘[S-V]ing’          Tüm 4 karakterli ve ilk karakteri S ile V arasında olan ve ing ile biten tüm isimler
LIKE ‘M[^c]%’M ile başlayan ve ikinci karakteri c olmayan tüm isimler
ÖRN : SELECT companyname
FROM customers
            WHERE companyname LIKE ‘%Restaurant%’
 


SNÇ :
Lojik operatörler :
Birden fazla kriterleri bir arada kullanmamıza yardımcı olurlar. AND operatörü kullandığımız takdirde verdiğimiz tüm koşullara uyan kayıtlar gelir. OR operatörü kullandığımız takdirde verdiğimiz koşullardan birine uyanlar gelir. NOT kullandığımızda ise NOT dan sonraki koşulu sağlamayan kayıtlar gelir. Birden fazla koşul kullandığımız durumlarda parantezi koşulları gruplamak için kullanabiliriz. Böylece daha okunaklı olur ve gruplama işlemini yapabiliriz.
SQL Server 2000 ilk önce NOT operatörüne arkasından AND ve OR operatörlerine bakar. Eğer tüm operatörler aynı grup içerisinde ise soldan sağa doğru işlenir.
ÖRN : SELECT productid, productname, supplierid, unitprice
            FROM products
            WHERE (productname LIKE ‘T%’ OR productid=46)
            AND (unitprice >16.00)
 


SNÇ :
Birden fazla koşulu parantezler ile gruplandırdık.
Değer aralıkları :
BETWEEN ifadesini Where ile beraber kullanarak belli bir değer aralığındaki kayıtları getirebiliriz. Between ifadesi ile belirlenen aralık dışında kalan verileri almak için NOT BETWEEN kullanabiliriz. Between ifadesinde verilen aralığın bir bitiş noktası olmadır. Between ile verilen aralık (10 and 20) aslında AND ifadesi kullanılmı ve büyük eşittir, küçük eşittirden oluşan bir koşuldur. Bunu kısaca between ifadesi ile yapmaktayız. Örneğin (KOD BETWEEN 10 AND 20) aslında ((KOD>=10) AND (KOD<=20)) demektir.
ÖRN : SELECT productname, unitprice
            FROM products
            WHERE unitprice BETWEEN 10 AND 20

SNÇ :

Aslında aynı ifadeyi aşağıdaki şekildede yazabilirdik.
SELECT productname, unitprice
FROM products
WHERE (unitprice>=10)
AND (UnitPrice<=20)
Değer Listeleri :
Verilen bir liste içerisinde yer alan veya almayan değerleri içeren kayıtları getirir. Listede yer alanları aramak için IN, yer almayanları aramak için NOT IN ifadelerini kullanırız. Birden fazla koşulu OR ilede ayırabiliriz veya IN ile bir liste içerisinde arayabiliriz. İkisinide SQL aynı şekilde çözümler. Yani KOD IN [1,2] diyebildiğimiz gibi KOD=1 OR KOD=2 de diyebiliriz.
NOT IN ifadesi daha öncede belirtildiği gibi veri akışını yavaşlatabilir.
ÖRN : SELECT companyname, country
            FROM suppliers
            WHERE country IN (‘Japan’,’Italy’)

SNÇ :

Bu ifadeyi şu şekilde de yazabilirdik.
SELECT companyname, country
FROM suppliers
WHERE country=’Japan’ OR country=’Italy’
Bilinmeyen değerler :
Veri girişi sırasında tablodaki kolona veri girilmemiş olabilir ve default veri de atanmamış olabilir. Bu durumda bu kolondaki değer NULL’dur. Null değer 0 (nümerik) veya boşluk (string) ile aynı şey değildir. Bir alana değer girilmemiş kayıtları listelemek isin IS NULL ifadesini kullanabiliriz. Null ifadesini diğer koşullar ile kullanamayız. Yani >Null diye birşey diyemeyiz. Kolonlar Null değer içerebilir tanımını tablo yaratırken yapabiliriz.
ÖRN : SELECT companyname, fax
            FROM suppliers
            WHERE fax IS NULL