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.
Yer Tablosu
Bölüm-No Bulunduğu yer
Proje Tablosu
Proje-Adı Proje-No Yer Bölüm-No
Çalışma Tablosu
Personel soy. Güv. No. Proje-No. Saat
Bu tabloların her sütunu, 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.
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 2SORGULAMALAR
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
BRUT
1
Haluk
Levent
800
12
Nesrin
Aslan
700
24
Esra
Gül
500
..
....
.....
....
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
800
Nesrin
Aslan
700
Esra
Gül
500
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
Nesrin
Aslan
700
24
Esra
Gül
500
1
Haluk
Levent
800
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şı 500 'den faza olan personel listelenmek istenirse, SELECT komutu aşağıdaki gibi yazılmalıdır. SELECT * FROM personel WHERE brut>500;
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 küçü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.
I 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şı 800'den fazla olmayan personeli listeleyen program. ? SELECT * FROM personel WHERE brüt <= 800;
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?
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şı 500'dan fazla ve cinsiyeti erkek olan personelin listeleyiniz. ? SELECT * FROM personel WHERE brut > 500 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.
.T.
.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 fikir verilmektedir. Ö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.