Araştırmamızın konusu bir veri tabanı sorgulama
dili daha doğusu alt dil olan SQL'in yapısı ve kullanımı hakkında
açık ve basit bir şekilde bilgi birikimi vermektir.
SQL ISO 9075 ile tanımlanan standart bir dildir ve hızla
yaygınlaşmıştır.Bugün veri tabanı kullanan her yazılım yada
kullanıcı yeri gelince SQL ile karşı karşıya gelmektedir. SQL
veri tabanı uygulamalarında,veri tanımlama,veriye erişim
kontrolü,sorgulama ve güncelleme amaçları için gerekli komutlara
sahip olan bir alt dildir.
BÖLÜM 1SQL'E GİRİŞ
SQL'E (STRUCTURED QUERY LANGUAGE) GİRİŞ SQL kısaltması,
Structured Query Language'e (Yapılandırılmış Sorgulama dili) karşılık
gelir,ancak genellikle eski adı olan Sequel olarak okunur.SQL farklı türlerde ve pek çok
donanım platformunda ilişkisel veri tabanı yönetim sistemi (RDBMS)
oluşturarak erişmek için kullanılan standart dildir.
SQL veri tabanı uygulamalarında bir alt dil görevi yapar
demiştik.Alt dil denmesinin nedeni,bir bilgisayar dilinin sahip
olması gereken tüm komutlara sahip olmadığındandır. Sql'in sahip
olmadığı bu komutlar,döngü
komutları if then else yada goto gibi kontrol ve dallanma
komutlarıdır.Fakat Sql'in diğer dillerle birlikte kullanılması
mümkün olduğundan, gerekiyorsa,Sql komutları diğer dillerin döngü
yada kontrol komutları içinde kullanılabilir.
Bu tabloların her sütünü,tabloda saklanan verilerle ilişkili bir
özelliği belirtmektedir.Her tablo satırı,birbiri ile ilişkili
verileri saklamaktadır. TABLOLARIN YARATILMASI:
SQL ile giriş bölümünde verilen tabloların yaratılması için,CREATEE TABLEkomutu
kullanılmaktadır.Aşağıda bir tablo yaratacak SQL komutları
verilmiştir.
CREATE TABLE yer Bölüm_No SMALLINT,Bul_Yer VARCHAR(15));
CREATE TABLE
Proje (Proje_Adi CHAR (10),Proje_No SMALLINT,Yer VARCHAR (15),Blm_No SMALLINT;
CREATE TABLE Calısma
Personel_g_no CHAR (8),Proje_No SMALLINT,Saat SMALLINT ); SQL'DE VERİ TİPLERİ : Tabloların oluşturulması için kullanılan sütun isimlerinin her biri
farklı tipte tanımlanmıştır.
SQL'de kullanılan veri tipleri :
Char,Varchar,İnteger,Smallint,date,logical,numerik (x,y) TABLOLARA VERİ YÜKLENMESİ Bir tabloya veri girişi işlemi için,SQL'de
mevcut olan komut: INSERT INTO/VALUES
komutudur.Bu komut yardımı ile personel adlı tabloya,ilk satır
bilgileri,aşağıdaki gibi düzenlenmiş bir INSERT komutu ile
girilebilir.
INSERT INTO Personel VALUES (1,'1234','Ali','Kuşcu',{01/03/99},'Samsun',.T.); Komut içindeki değerler incelendiğine,sayısal nümerik değerler
olduğu gibi yazılmakta, karakter türü veriler '' sembolleri içine
alınmakta,lojik (mantıksal türdeki veriler.T.yada .F.şeklinde
belirtilmekte ve tarih (date) türü bilgiler ise {} sembolleri ile
ayırt edilmektedir. SQL dilinin tüm ekran,üzerinde bilgi
girişi için (full screen mode) kolaylık sağlayan ve etkileşimli (interacivate)
olarak çalışmayı sağlayan komutları yoktur.Bu nedenle SQL tabloları
içinde bilgi girişi genellikle,SQL'in içinde kullanıldığı üst dilin
bilgi giriş komutlarından yararlanılarak yapılır. TABLOLARDAKİ SÜTÜN VE TABLO İSİMLERİ
ARASINDAKİ KURALLAR SQL dilinde bir tabloya yada içindeki bir
sütuna (kolon) ismi vermek için gerekli kurallar,bir SQL
uygulamasından ötekine değişebilmektedir.Fakat genellikle,geçerli
olan kurallar aşağıdaki gibidir.
İsim uzunlukları 18 karaktere kadar olabilir.(Bazı SQL
uygulamalarında 8 olabilmektedir. İlk karakter bir harf olmalıdır.Onu izleyen karakter,harf,rakam yada
alt çizgi olabilir.
BÖLÜM 2 SORGULAMALAR TEK TABLO İÇİNDE SORGULAMALAR
SQL içinde,tek bir tablo içinden çeşitli kriterlere göre bilgi sorgulama,bilgiyi
sıralı olarak elde etme,bilgiyi özetleme,ortalama vb.gibi
matematiksel işleri gerçekleştirmeyi sağlayan komut ve fonksiyonlar
vardır.Ayrıca doğal olarak,aynı tipte işlemleri birden çok tabloyu
birlikte ele alarak gerçekleştirmek de mümkündür.
SQL KOMUTLARI Select komutu :Select
kalıbı sorgunun sonucunda istediğiniz bir alanın listesini gösterir
Bir alan listesi yerine asterisk (*) işaretini kullanarak bir
tablodaki bütün alanları seçebilirsiniz.
From komutu:From kalıbı,sorgunun oluşturulmasında dikkate almak istediğimiz
tabloları gösterir. Tek tablodan gerekli bilgileri elde etmek için sorgulama
yapılabilecek SQL komutu olan SELECT'in en basit şekli aşağıdaki
gibidir. Örnek:SELECT *FROM Personel;Bu komut personel adlı tablo içindeki bütün bilgileri koşulsuz
olarak listeleyecektir.Select sözcüğünü izleyen kısımda (*)
sembolünün bulunması,ilgili tablodaki bütün sütun isimlerinin ve
ilgili bilgileri listelemesini sağlayacaktır.Yukarıdaki komutun
eşdeğeri : Örnek:SELECT Sicil,Adi,Syd,Dtr,Dyr,Adr
FROM personel; SELECT sözcüğünü izleyen kısmında sütun adları,FROM sözcüğü
kısmında ise tablo ismi belirtilmektedir.
Where Komutu :Where
kalıbı kayıt seçiminde kullanılacak kriteri gösterir.Where
olamadığı zaman bütün kayıtlar seçilir. Örnek:SELECT Ismi,Sehir
FROM Sehirler WHERE nüfus > 20000000; Bu örneğe göre toplam nüfusu 20000000'den büyük olan tablonun adı
şehirler olan kütükdeki bilgileri gösterir.
Distinct Komutu:
Sql'de tablo içinde,birbirinin aynı data içeren satırlara müsaade
edilir. Birbirinin aynı olan satırların,listeleme esnasında,bir
kez yazılması için SELECT komutuna DISTINCT sözcüğü eklenir. Örnek:SELECT DISTINCT Satici_No FROM Parca_Satis; Burada Parça Satışı diye bir tablomuz var.Bu tabloda satıcı
numaralarını listelemek istiyoruz.Fakat bilindiği gibi SQL tabloda
aynı alanları listelemeye izin verir.Buradaki listelenmek istenen
satıcıların numaralarını listelemektir.Bilindiği gibi bir satıcının
sattığı birden çok mal olabilir.Bu sebeple her satış için satıcı nosu listelenecektir.DISTINCT burada bir satıcı nosunu
tekrarlamadan listelemeye yarar. Distinct'siz
Distinct'li Satıcıno1
Satıcıno1 Satıcıno1 Satıcıno1 Satıcıno1
Satıcıno2 Satıcıno2 TABLO BİLGİLERİNİN SIRALANMIŞ OLARAK
LİSTELENMESİ Tablodan listelenecek bilgilerin,belili
bir sütuna adına göre (numaraya vb..)sıralanmış olarak
görüntülenmesi için,Select
komutuna Order by sözcüğü ilave edilir.
Örnek: Personel tablosundaki bilgilerden,sicil,ad,soyad ve brüt
sütunlarını,maaş'a göre artan sırada (küçükten büyüğe doğru) sıralı
olarak listeleyiniz.?
SELECT sicil,ad,soyad,brüt
FROM personel
ORDER BY brüt ASC; Sicil Ad Soyad
Maas 1 Haluk Levent 80000000 12 Ayşe Satır 70000000
24 Esra Gül 50000000 .. .... ...
........
ASC sözcüğü (ascending) artan anlamındadır.
Örnek:SELECT ad,soyad,brüt
FROM personel
ORDER BY brüt DESC; DESC (descending) sözcüğü azalan anlamındadır. Ad Soyad Brut Haluk Levent 80000000 Ayşe Satır 70000000
Esra Gül 50000000
BİRDEN ÇOK ALANA GÖRE SIRALAMA Bir tablo içindeki verileri aynı anda
birden çok sütuna (alana) göre sıralamak da mümkündür.
Örnek:Personel tablosu personel adı ve
maaşa göre sıralamak isteyelim.Buna göre aşağıdaki Select komutunu
yazmamız gerekir.
SELECT sicil,ad,soyad,brüt
FROM personel
ORDER By ad,brüt; Burada,tablo öncelikle ad'a göre artan sırada (A'dan Z'ye doğru)
sıralanacak,sadece aynı ad'a sahip olanlar kendi aralarında brüt'e
göre artan sırada (düşük maaştan yüksek maaşa doğru) sıralanacaktır. Sicil
Ad Soyad Brut 12 Ayşe Satır
70000000 24 Esra Gül
50000000 1 Haluk Levent
80000000
KOŞULA BAĞLI LİSTELEME SELECT komutu ile bir tablonun satırları
içinde sadece bir koşulu sağlayanlar listelenebilir.
Örnek:Brüt maaşı 50000000'den faza olan personel
listelenmek istenirse,SELECT komutu aşağıdaki gibi yazılmalıdır. SELECT *
FROM personel WHERE brut>50000000; Burada WHERE sözcüğünü izleyen kısımda koşul belirtilmektedir.
Koşul belirtilirken iki veri birbiri ile karşılaştırılır.SQL
içinde verileri karşılaştırmak için bazı operatörler vardır.Karşılaştırılma ifadesinde karşılaştırılan verilerin türü aynı
olmalıdır.Yani alfabetik bilgi alfabetik bilgiyle,nümerik veri ise
nümerik bir veriyle karşılaştırılır. SQL'de Karşılaştırma Operatörleri
Operatör Anlamı < Den daha küçük
> Den daha büyük = Eşit <= Küçük eşit
>= Büyük eşit <> Farklı != Eşit değil NOT IN Bir grup değer içinde
olmayanlar. != ALL eşdeğeridir. ANY Bir grup içindeki değerlerden
birini belirler. ALL Bir liste içindeki tüm
değerlerle karşılaştırır. BETWEENxANDy X ve y değerleri arasındaki değerleri
belirler. NOT
X ve y arasında olmayan
değerleri belirler. IS NULL Yokluk değerine sahip olanları
tanımlar. IS NOT NULL Yokluk değerine sahip olmayanları
tanımlar.
ÇEŞİTLİ VERİ TİPLERİ İÇİN BASİT SORGULAMALAR<
Nümerik veri tipi: Sayısal veri tipi,SMALLINT,İNTEGER,DECIMAL,NUMERIC ve FLOAT
tip bildiren sözcüklerde kullanılır.
Örnek:Brüt maaşı 80000000'den fazla olmayan
personeli listeleyen program.?
SELECT * FROM personel WHERE brüt <= 80000000;
Karakter (Char) veri tipi Karakter türündeki veriler,çift tırnak (" "),veya tek tırnak (' ')
sembolleri içine yazılırlar.Bu tip veriler,rakamlardan oluşsa
bile,matematiksel işlemler içinde kullanılamazlar.
Örnek:Adı ali olmayan personele ait kayıtları
listeleyiniz?
SELECT * FROM personel WHERE ad <> "Ali" veya SELECT * FROM personel WHERE ad != "Ali";
Tarih veri tipi:
Tarih tipli veriler { } sembolleri içine yazılmalıdır.
Örnek:Hangi personelin doğum tarihi 1979'dan daha
öncedir?
SELECT * FROM personel WHERE dtr <= {12/31/1979};
Mantıksal veri tipi (lojik)
Mantıksal veriler 2 değer alır.Doğru (.T.true) ve yanlış (.F.false)
Örnek:Personel tablosundaki erkek elemanları
listeleyiniz? Not:
Tabloda personelin cinsiyetini belirten cins adlı alan mantıksal
türde tanımlanmıştır. SELECT * FROM personel WHERE cins =
.T.; veya SELECT * FROM personel WHERE cins; Bu durumda
cins alanında .T.olanlar listelenecektir. BİRDEN ÇOK KOŞULA BAĞLI SORGULAMALAR NOT-AND-OR Bu operatörlerle birden çok koşula bağlı listelemeler yapılabilir.
Örnek:Maaşı 50000000'dan fazla ve cinsiyeti
erkek olan personelin listeleyiniz.? SELECT * FROM personel WHERE brut > 50000000 AND cins=.T.;
Her iki koşulunda aynı anda gerçekleşmesi istendiğinde AND sözcüğü kullanılmıştır.
Aşağıda
örnek sorularla,mantıksal işlem operatörlerinin kullanımı konusunda
fikirverilmektedir. Örnek:
Bölümü satış veya muhasebe olan kadın
personelini listeleyiniz?.Satış bölümünün bölüm numarası 1 ve
muhasebe bölümünün bölüm numarası 2 olduğunu varsayarsak:
SELECT * FROM personel WHERE (bolumno
= 1 OR bolumno = 2)AND cins = .F.;
Örnek:
Satış bölümü ile muhasebe bölümündekiler kimlerdir? SELECT * FROM personel
WHERE (bolumno = 1 OR bolumno = 2);
Örnek:Bölümü satış yada muhasebe olmayan,1978'den sonra doğmuş bayan personeli listeleyiniz?
SELECT * FROM personel WHERE NOT
(bolumno = 1 OR bolumno = 2) AND dogumtrh
>= {01/01/78}AND
cinsiyet = .F.;
BİR VERİ KÜMESİ İÇİNDE ARAMA-IN OPERATÖRÜ
Aşağıdaki örnek sorunun cevabını şu ana kadar öğrendiğimiz SQL
komutları ile gerçekleştirebiliriz.
Örnek:Bölüm numarası 1,2 yada 3 olan personelleri
listeleyiniz?
SELECT * FROM personel
WHERE bolumno = 1 OR bolumno = 2 OR bolumno = 3;
Fakat SQL'de bu işlemi gerçekleştirmenin daha kısa bir yolu vardı.IN sözcüğünü kullanarak yazacağımız :
SELECT * FROM personel WHERE bolumno IN (1,2,3); Şeklindeki komut OR
ile düzenlenen 1.SELECT'le aynıdır. ARALIK SORGULAMASI (BETWEEN)
Örnek:Maaşı 5-10 Milyon arasında olan personel
kimlerdir ?
1-)SELECT
* FROM personel WHERE brüt >= 50000000 AND brüt <= 100000000; Şeklindeki
bir SELECT komutu cevap verebilir.Aynı soruya daha kısa bir şekilde BETWEEN sözcüğü ile cevap verilebilir.
2-)SELECT
* FROM personel WHERE brüt
BETWEEN 50000000
AND 100000000; KARAKTER TÜRÜ BİLGİ İÇİNDE ARAMA YAPMA LIKE SÖZCÜĞÜ Personel tablosu içinde adres adlı 50 karakterlik bir bilgi olduğunu
varsayalım.Adres değişkeni içerisinde belirli bir semtte ikamet
eden personeli listelemek istediğimizde şu satırları yazabiliriz.
SELECT * FROM personel WHERE adres LIKE '%küçük çekmece%'; Bu komut ile küçük çekmece de oturanları listelemektedir.Yalnız bu
komut ile sadece semti değil bütün adresi listeleyecektir.Burada
yapılan işlem,küçükçekmece sözcüğünü aramaktır. % sembolü içinde küçük çekmece sözcüğünün öncesi ve sonrasındaki karakterler ne olursa olsun anlamındadır.