SQL VERİ TABANI SORGULAMA DİLİ  

ÖNSÖZ

   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.

İÇİNDEKİLER
BÖLÜM-1
SQL'E GİRİŞ
TABLOLARIN YARATILMASI
SQL'DE VERİ TİPLERİ
TABLOLARA VERİ YÜKLENMESİ
TABLOLARDAKİ SÜTUN VE TABLO İSİMLERİ ARASINDAKİ KURALLAR
BÖLÜM-2 SORGULAMALAR
TEK TABLO İÇİNDE SORGULAMALAR
TEMEL SQL SORGULAMALARI
SELECT KOMUTU
FROM KOMUTU
WHERE KOMUTU
DISTINCT KOMUTU
TABLO BİLGİLERİNİN SIRALANMIŞ OLARAK LİSTELENMESİ
BİRDEN ÇOK ALANA GÖRE SIRALAMA
KOŞULA BAĞLI OLARAK LİSTELEME
ÇEŞİTLİ VERİ TİPLERİ İÇİN BASİT SORGULAMALAR
NÜMERİK VERİ TİPİ
KARAKTER VERİ TİPİ
TARİH VERİ TİPİ
MANTIKSAL (LOJİK) VERİ TİPİ
BİRDEN ÇOK KOŞULA DAYALI SORGULAMALAR (NOT-OR-AND)
BİR VERİ KÜMESİ İÇİNDE ARAMA IN OPERATÖRÜ
ARALIK SORGULAMASI BETWEEN KOMUTU
KARAKTER TÜRÜ BİLGİ İÇİNDE ARAMA YAPMA LIKE SÖZCÜĞÜ

BÖLÜM 1 SQL'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.

Yer Tablosu
Bölüm-No   Bulunduğu yer

Proje Tablosu
Proje-Adı  Proje-No    Yer Bölüm-No

font-weight:700">Çalışma Tablosu
Personel soy.Güv.No. Proje-No.Saat

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 TABLE komutu 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.

  NOT Operatörü
     Koşul  NOT  Koşul
     .T.        .F.
     .F.        .T.
      AND Operatörü

   1.Koşul   2.Koşul     3.Koşul
    .T.         .T.            .F.
    .T.         .F.             .F.
    .F.         .T.             .F.
    .F.         .F.             .F.
       OR Operatörü

   1.Koşul    2.Koşul      3.Koşul
    .T.         .T.              .T.
    .T.         .F.              .T.
    .F.         .T.              .T.
    .F.         .F.              .F.

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.