SQL (Structured Query Language) kendisi bir programlama dili olmamasına rağmen bir çok kişi tarafından programlama dili olarak bilinir. SQL herhangi bir veri tabanı ortamında kullanılan bir alt dildir. (sub language) SQL ile yalnızca veri tabanı üzerinde işlem yapabiliriz. SQL cümleceikleri kullanarak veri tabanına kayıt ekleyebilir, olan kayıtları değiştirebilir silebilir ve bu kayıtlardan listeler oluşturabiliriz. SQL cümlecikleri genellikle aynı olmakla birlikte farklı veri tabanı ortamlarında değişebilmektedir. Ayrıca veri tabanlarının kendilerine özgü sql komutlarıda vardır. Biz burada her ortamda geçerli olan temel sql komutları işleyeceğiz.Şimdi örnekler kullanacağımız bir database tanımlayalım. Aşağıdaki Örnekler Microsoft SQL Server 6.5 'da denenmiştir.
Tablo adı : personel
Kolon : sicil_no:text (8)
Kolon : ad:text (8)
Kolon : soyad:text (8)
Kolon : dogum_tarihi:date
Kolon : dogum_yeri:text (8)
Kolon : cinsiyeti:text(1)
Kolon : medeni_hali:binary
Kolon : meslek_id:smallint
Kolon : egitim_durumu:binary
Kolon : adres:text (50)
Tablo adı : ucretler
Kolon : per_sicil_no:text (8)
Kolon : baslama_tarihi:date
Kolon : aylık_ucret:numeric
Kolon : aile_yardimi:numeric
Kolon : egitim_yardimi:numeric
Kolon : kesinti:numeric:
Tablo adı : meslekler
Kolon : meslek_id:smallint
Kolon : aciklama:text (23)
Kolon : taban_ücret:numeric
From
İlk önce bu komut ile başlayalım. Bu komut bütün SQL cümleciklerinde bulunması gerekli bir komuttur.Bu komut ile hangi tablolar üzerinde çalışacağımı veri tabanına söylüyoruz. Eğer aynı sql cümleciği ile bir kaç tablo üzerinde işlem yapmak istersek tablo isimleri arasına virgül koymalıyız. aşagıdaki örnekleri SELECT komutundan sonra açıklayacağım.
Örnek 1 :
SELECT * FROM personel;
Örnek 2 :
SELECT * FROM personel,ucretler;
Select
Bu komut ile database üzerindeki tablonun hangi kolonları alacağımız veritabanına söyleriz.Tablonun bütün kolonlarını görmek istiyorsak '*'
karekterini kullanırız. Sadece belli kolonları görmek istiyorsak kolon isimlerini aralarına virgül koyarak yanyana yazmalıyız.Yukarıdaki örnekleri açıklayacak olursak birinci örnek personel tablosundaki bütün kayıtları getirecektir. İkinci örnekte ise persenol ve ücretler tablosundaki bütün kayıtlar çekilecektir.
Örnek 3 :
SELECT * FROM meslekler ;
Bütün meslek
bilgilerini almak istersek yukarıdaki gibi bir query yazmalıyız.
Örnek 4 :
SELECT ad,soyad FROM personel ;
Bu query ise bize
firmamızda çalışan bütün personeli listeler.
SQL'de Veri Tabanı Yaratma
SQL komutları yalnızca bir veri tabanı üzerinde geçerli olduğu
için veri tabanı yaratma işlemlerinide anlatmanın yararlı
olacağına inanıyorum. Aşağıda anlatılan işlemler SQL Server
6.5 üzerinde gerçekleştirilmiştir.Database yaratmak için
aşagıdaki komutu yazabiliriz.
CREATE DATABASE database_name
[ON {DEFAULT | database_device} [= size]
[, database_device [= size]]...]
[LOG ON database_device [= size]
[, database_device [= size]]...][FOR LOAD]
database_name : Bu yaratılacak olan veri tabanının ismidir.
ON : Bu ise yaratılacak olan veri tabanın hangi
device üzerinde yer alacağını belirten bir parametredir.
Burada aynı zamanda bu device üzerinde size parametresi ile
database'in ne kadar yer kaplayacağını belirmiş oluyoruz.
Eğer device tanımlamaz isek SQL server default device
üzerinde 5 mb bir veri tabanı yaratacaktır.Bu parametre
içinde birkaç device ismi kullanarak veri tabanını bir kaç
device üzerinde yer almasını sağlayabiliriz.
LOG ON : Bu ise yaratılacak olan veri tabanın
log'unun hangi device üzerinde yer alacağını belirten bir
parametredir. Burada aynız zamanda bu device üzerinde size
parametresi ile database'in log'unun ne kadar yer
kaplayacağını belirmiş oluyoruz. Eğer device tanımlamaz isek
SQL server default device üzerinde bir log tutacaktır.Bu
parametre içinde birkaç device ismi kullanarak veri tabanı
log'unun bir kaç device üzerinde yer almasını sağlayabiliriz.
Örnek 1 :
CREATE DATABASE fat123
Bu komut ile SQL Server üzerinde fat123 isimli boş bir
database yaratmış oluyoruz. (Dönen mesaj :CREATE DATABASE:
allocating 2560 pages on disk 'a1v1')
Örnek 2 :
CREATE DATABASE fat123
ON master = 10
Bu komut
ile SQL Server'da master device'ı üzerinde 10 mb'lık fat123
isimli boş bir database yaratmış oluyoruz.
Örnek 3 :
CREATE DATABASE fat123
ON fat123 = 10
LOG ON fat123log = 5
Bu komut ile SQL Server'da fat123 device'ı üzerinde 10 mb'lık fat123
isimli boş bir database ve fat123log device'ı üzerinde 5 mb
bir log yaratmış oluyoruz.
Örnek 4 :
CREATE DATABASE fat123
ON fat=10 , fat1 = 10 , fat2=10 , fat3=10
LOG ON fat123log = 20
Bu komut ile ise fat123 isimli veri tabanını 4 farklı device
üzerinde yaratıyoruz.
Genellikle yaratılan database'in yarısı kadar bir alanda log
için oluşturulur.
SQL Komutları
Order By
Bu komut
ile belirtilen kolona göre artan veya azalan bir sıralama
ile sorgulama yapabiliriz.
ASC : kullanarak küçükten büyüğe doğru artan sıralama
yapabiliriz.
DESC : kullanarak büyükten küçüğe doğru azalan sıralama
yapabiliriz.
Ancak ASC kullanmak zorunlu değildir. Çünki default
sıralama tipi ASC'dir. Aynı anda birkaç kolon üzerindende
sıralama yapabiliriz.
Örnek 1 :
SELECT * FROM personel ORDER BY ad ASC;
Bu query
ile personel tablosundaki bütün kayıtları ad'a göre
küçükten büyüğe dogru sıralarız.
Örnek 2 :
SELECT * FROM personel ORDER BY soyad DESC;
Bu query
da yukarıdakinin tersine kayıtları büyükten küçüğe dogru
sıralar.
Örnek 3 :
SELECT * FROM personel ORDER BY ad,soyad;
Bu query kayıları ad göre artan bir sıralama yapar. Ancak aynı ad
ile yaratılmış birden fazla kayıt varsa ise bunlarıda
soyad sırasına göre artan bir şekilde sıralar. Eğer her
iki kolnda aynı ise o zaman okuduğu sırada sıralar.
Örnek 4 :
SELECT * FROM personel ORDER BY dogum_tarihi DESC,ad,soyad ;
Bu query'de ise pernel kayıtları büyükten küçüğe doğru
sıralanıyor. Yani en genç eleman'dan başlanarak en yaşlı
elemana doğru bir liste yapılıyor. Doğum tarihleri aynı
olanlarda ise ad ve soyad'a göre bir sıralama yapılmaktadır.
Where
Yukarıda yaptığımız sorgulamaların hepsinde hiç bir koşul
belirtmedik.Yani bütün kayıtları tablolardan çektik. Ancak
gerçek hayat'ta bu kayıtların sadece bir kısmına ihtiyaç
duyarız.Bize gerekli olan dataları diğerlerinden ayıran
bazı özellikleri vardır. İşte bu özellikleri bu komut
yardımı ile kullanarak gerekli datalara ulaşabiliriz.
Örnek 5 :
Adı ahmet olan personeli listelemek istersek ne yapacağız.Aşagıdaki
gibi bir sorgulama yapacağız.
SELECT * FROM personel WHERE ad='ahmet';
Örnek 6 :
Yaşı 40'dan büyük personeli listeleme istersek;
SELECT * FROM personel WHERE dogum_tarihi <
'01.01.1959'
sorgulamasını kullanmalıyız.Elemanın 40 yaşında büyük
olması için 1959 yılından önce doğmuş olması
gerekmektedir. O halde dogum_tarihi 1959 yılından küçük olmalıdır.
Örnek 7 :
Adana'da doğmuş personeli listelemek istersek
SELECT * FROM personel WHERE dogum_yeri = 'Adana'
Örnek 8 :
300 milyondan fazla maaş alan kişileri işe maaşa göre
sıralamak istersek;
SELECT * FROM ucretler WHERE aylik_ucret >= 300000000
ORDER BY aylik_ucret
Operatörler
Her programlama dilinde olduğu gibi SQL'de de operatörler bulunur. Üç çeşit operatör
mevcuttur. Karşılaştırma oparatörleri , mantıksal operatörler ve
kümeleme operatörleri.Bu karşılaştırma operatörleri aşağıdaki gibidir ;
operatör anlamı
a>X ... X... a'dan küçük
a<X ... X... a'dan büyük
a=X ... X... a'ya eşit
a=>X ... X... a'dan küçük eşit
a<=X ... X... a'dan büyük eşit
a<>X ... X... a'ya eşit değil
Mantıksal operatörler ise AND,OR,NOT olarak verilebilir. Bu
operatörler burada anlatmayacağız. Bunlar standart bütün dillerde aynı
olan operatörlerdir.Kümeleme operatörleri ise datalar üzerinde
gruplama yapmamızı sağlayan operatörlerdir.Bu operatörler Between , In
, Like operatörleridir. Bu operatörlerin hepsini where ile birlikte
kullanmalıyız.
Between : Aralıklı sorgulama yapmak istersek kullanabilecegimiz bir
operatördür.
Örnek 1 :
SELECT * FROM ucretler WHERE aylik_ucret BETWEEN 200000000 AND
300000000
Bu cümlecik ile 200 ile 300 milyon arasında maaş alanlar listelenecektir.
Örnek 2 :
SELECT *
FROM fat_bsl
WHERE ft_tar BETWEEN '01.01.1998' and '04.06.1999'
Bu sorgulamada ise fatura tarihi 01.01.1998 ve 04.06.1999 tarihleri
arasındaki faturalar listelenmiştir.Verilen tarih formatının sistemde
kullanılan tarih formatı ile aynı olmasına dikkat edilmelidir. Yoksa
sizin verdiğiniz tarih doğru olsa bile format farklı ise sorgulamanız
geriye data döndürmez. (Yukarıdaki sorgulamada başıma geldide ( )
In : Bu komut ile belli bir kolonun kümesini vererek işlemimizi
daha kolay bir şekilde yapabiliriz.
Örnek 3 :
SELECT * FROM personel WHERE meslek_id IN (1,2,3)
Buradaki örnek 'te 1,2 veya 3 meslek grubundan herhangi birine dahil
olan personel listelenemektedir.Bu örnek aşagıdaki şekildeki gibide
yapabiliriz;
SELECT * FROM personel
WHERE meslek_id=1 OR meslek_id=2 OR meslek_id=3
Like : Bu ise içinde belli bir karakter dizisi bulunan datalara ulaşmak istersek
kullanabileceğimiz bir operatördür.
Örnek 4 :
SELECT * FROM personel WHERE adres LIKE '%İstanbul%'
Bu sorgulama ile adres alanında İstanbul geçen kayıtları listelemiş oluruz.
Örnek 5 :
SELECT * FROM personel WHERE adres LIKE '%İstanbul'
Bu sorgulama
ile adres alanının sonunda İstanbul geçen kayıtları listelemiş oluruz.
Örnek 6 :
SELECT * FROM personel WHERE adres LIKE 'İstanbul%'
Bu sorgulama ile adres alanının başında İstanbul geçen kayıtları listelemiş oluruz
SQL'de Yeni Bir Kayıt Eklemek
Tabloya yeni bir satır eklemek istersek INSERT INTO sözcüğünü kullanırız. Genel kullanım şekli aşağıdaki biçimdedir ;
INSERT INTO tablo adı VALUES
(deger1,deger2,deger3,...)
Eğer sadece belirli sahalara değer girmek istersek INSERT INTO'yu
aşağıdaki şekildeki gibide kullanabiliriz.
INSERT INTO tablo
adı(kolon1,kolon3,kolon9,kolon7) VALUES
(deger1,deger3,deger9,deger7)
Örnek :
Yeni bir personel eklemek istersek ;
INSERT INTO personel VALUES
('asdf2345','Ahmet','Yıldırım','01.01.1960','Ankar a','E',1,7,1,'ebuziya
cad. Bakırköy')
Örnek :
Yeni bir meslek eklemek istersek ;
INSERT INTO meslekler VALUES (23,'Belçi',200.000.000)
Bir tablodan bazı kayıtları başka bir tabloyada aktarabiliriz. Bunun için
aşağıdaki gibi bir ifade yazmalıyız;