SQL İLE TABLO İŞLEMLERİ
Kısa bir Tarihçe:
İlişkisel (relational) database modeli 1970'li yıllarda Dr. Edgar F. Codd tarafından geliştirilmiştir. IBM ve Dr. Codd'un çalışmaları sonucunda Sql (Structured Query Language-Yapısal Sorgulama Dili) ortaya çıkmıştır. Sql bugün ilişkisel database sistemlerinde bir standart haline gelmiştir. Bugün database (veritabanı) ismini duyduğunuz hemen hemen her yerde kullanılan Sql birçok programlama dilinin içinde de bütünleşik olarak gelmektedir. Örneğin Dbase, Visual Basic, Delphi, Developer 2000 gibi. Birçok programlama dili de alt tabanda SQL'i kullanmaktadır. DB2, Sysbase, Oracle, Informix, Microsoft Sql Server, Interbase, Progress gibi Veritabanı Yönetim Sistemleri Sql tabanlıdır. Bugün İnternet ortamında program geliştirmek için kullanacağınız ASP,JSP ve Java gibi dillerle veritabanı işlemleri yapacak olursanız Sql kullanmalısınız. Sql veriye erişmenin, veri işlemenin ve sorgulamanın en hızlı yoludur.
SQL geliştirildiği 1970'li yıllardan günümüze gelene kadar birçok değişikliğe uğramıştır. Sql dilinde bir standardizasyona gidilmesi için ISO (International standard Organization) çalışma başlatmış ve en son SQL-92 ,ANSI Sql veya Sql 2 diye adlandırılan standart kabul edilmiştir. ANSI SQL, C, Basic, Pascal gibi dillerde gördüğünüz döngü ifadelerine ve şart yapılarına sahip değildir. Bu yüzden SQL'e bir programlama dili diyemeyiz. Fakat bazı firmalar ANSI SQL'e bağlı kalarak bir kısım eklemeler yapmış ve SQL'i kendilerine göre değiştirmişlerdir. Örneğin Microsoft Sql Server'in Transaction Sql dili döngü yapılarına ve şart ifadelerine de sahiptir. Biz ilk önce ANSI Sql komutlarını öğrenecek daha sonra da Sql Server ile uygulamalar geliştireceğiz.
SQL KOMUTLARI
SQL veritabanından sorgulama yapmak için SELECT, ekleme yapmak için INSERT güncelleme yapmak için UPDATE, yeniden veritabanı oluşturmak için CREATE DATABASE, yeni tablo oluşturmak için CREATE TABLE, silme işlemi için DELETE gibi komutlara sahiptir. Bu temel komutların ayrıntılarını şimdi görelim. SQL'i en basitinden kendi bilgisayarınızda Microsoft Access içinde deneyerek bu deneye hazırlanabilirsiniz.
SELECT Komutu
Genel formatı:
SELECT tablo_alanları FROM tablo_adı WHERE koşullar
şeklindedir. Örneğin aşağıdaki gibi bir Ogrenci tablomuz olsun,
Okul_no Ad Soyad D_tarihi NOT Bolumu
95530005 Hakan Saray 15.02.1976 30 Bilgisayar
95530006 Sinan Alagöz 17.03.1975 70 Elektronik
95530008 Erhan Atılgan 19.04.1976 50 Bilgisayar
95530009 Yeşim Ceylan 21.05.1976 65 Elektronik
96530010 Atilla Saray 23.06.1977 45 İşletme
yukarıdaki tablodaki tüm alanları seçmek için;
SELECT * FROM Ogrenci;
dememiz yeterlidir. Buradaki * işareti tüm alanların seçileceği anlamındadır. Aynı sonuca;
SELECT okul_no,Ad,Soyad,D_tarihi,Not,Bolumu FROM Ogrenci ;
yazarak da ulaşabiliriz.
Sadece ad,soyad listesini görmek için;
SELECT Ad,Soyad FROM Ogrenci ;
Koşula bağlı olarak listeleme yapmak istiyorsak o zaman WHERE kalıbını kullanmalıyız.. Örneğin, Notu 50'den büyük ve eşit olanları görmek için ise,
SELECT * FROM Ogrenci WHERE Not>=50 ;
Okul_no Ad Soyad D_tarihi NOT Bolumu
95530006 Sinan Alagöz 17.03.1975 70 Elektronik
95530008 Erhan Atılgan 19.04.1976 50 Bilgisayar
95530009 Yeşim Ceylan 21.05.1976 65 Elektronik
Soyadı "Saray" olanları listelemek için ise;
SELECT * from Ogrenci WHERE Soyad="Saray";
LIKE sözcüğü tablo içinde belli bir alana göre arama yapmak için kullanılır. % işareti wildchar karakter olarak kullanılır. DOS'tan alıştığınız * karakteri gibidir.
96'kayıtlı öğrencileri listelemek için;
SELECT * from Ogrenci WHERE Okul_no LIKE '96%';
Okul_no Ad Soyad D_tarihi NOT Bolumu
96530010 Atilla Saray 23.06.1977 45 İşletme
Bölümü "Bilgisayar" olanları listelemek için;
SELECT * from Ogrenci WHERE Bolumu="Bilgisayar";
Doğum tarihi 01.01.1976'dan büyük olanları listelemek için;
SELECT * from Ogrenci WHERE D_tarihi>={01.01.1976};
Okul_no Ad Soyad D_tarihi NOT Bolumu
95530005 Hakan Saray 15.02.1976 30 Bilgisayar
95530008 Erhan Atılgan 19.04.1976 50 Bilgisayar
95530009 Yeşim Ceylan 21.05.1976 65 Elektronik
96530010 Atilla Saray 23.06.1977 45 İşletme
Yukarıda görüldüğü gibi tarih bilgileri süslü parentezler arasında yazılmalıdır.
Eğer listelemeyi sıralı olarak yapmak istiyorsak Order By deyimini kullanmalıyız. Örneğin yukarıdaki tabloyu ada ve soyada göre sıralayacaksak;
SELECT * from Ogrenci WHERE D_tarihi>={01.01.1976}
ORDER BY Ad,Soyad ASC
Buradaki ASC sözcüğü Ascend yani artan şekilde harf için A'dan Z'ye doğru, rakam için küçükten büyüğe doğru sıralama anlamındadır. DESC sözcüğü ise bunun tersi işlemi yapar.
Eğer notu 60 ila 70 arasındaki kayıtları listelemek istersek o zaman, BETWEEN sözcüğünü kullanabiliriz.
SELECT * FROM Ogrenci WHERE NOT BETWEEN 60 AND 70 ;
yazarız.
Ortalama değer bulma:
Eğer bir dersten sınıf ortalamasını bulmak istersek AVG fonksiyonundan yararlanırız.
SELECT AVG(NOT) FROM Ogrenci;
AVG gibi MAX, MIN, SUM, COUNT fonksiyonları da aritmetiksel işlemler yapmak için kullanılabilir.
Peki tablomuzda kaç kayıt var?
Öğrenci tablosunda anahtar alan (Primary veya Unique alan) Öğrenci numarası olduğu için eğer bir tablodaki öğrenci sayısını bulmak istersek bu alanı referans göstererek sayma işlemini yapabiliriz. Çünkü bu alanının tablomuzda olması zorunludur.
SELECT COUNT (Okul_no) FROM Ogrenci;
SELECT COUNT(*) FROM Ogrenci;
Örneğin notu 50'den fazla olan Öğrenci sayısını bulmak için;
SELECT COUNT (*) from Ogrenci WHERE Not>50;
Gruplandırma
Örneğin her bölümünde okuyan öğrencilerden en yüksek notu listelemek istersek o zaman gruplandırma dediğimiz işlemi yapmak zorundayız. GROUP BY ve HAVING sözcükleri bu işlem için kullanılır. HAVING sözcüğü WHERE kalıbı gibidir. Gruplandırılan kayıtlardaki şart ifadelerini belirtmek için kullanılır. Yani HAVING ile GROUP BY kullanılmalıdır.
Şimdi yukarıdaki sorumuzu cevaplayalım,
SELECT AD,SOYAD,MAX(Not) FROM Ogrenci GROUP BY Bolumu;
VERİ TABANI OLUŞTURMA :CREATE DATABASE
Veritabanı oluşturmak için CREATE DATABASE deyimi kullanılır.
CREATE DATABASE Okul;
ile okul veritabanı oluşturulmuş olur.
TABLO OLUŞTURMA: CREATE TABLE
Tablo oluşturmak için CREATE TABLE deyimi kullanılır.
CREATE TABLE Ogrencı ( Okul_no CHAR(8) NOT NULL,
AD CHAR(30) NOT NULL,
SOYAD CHAR(30) NOT NULL,
D_Tarihi DATE,
NOT INTEGER,
Bolumu CHAR(30));
SQL'de tablo tanımlamak için SMALLINT, VARCHAR, DECIMAL(x,y), FLOAT(x;y), DATE, LOGICAL, TIME, TIMESTAMP, GRAPHIC(n) gibi alanlar da vardır. Daha geniş bilgi için kullandığınız Veritabanı Yönetim Sisteminin ya da Programlama dilinin referans kaynaklarına başvurunuz. Örneğin VARCHAR'ı Paradox tabloları desteklemez fakat Interbase tabloları destekler.
Tabloya Veri Eklemek : INSERT INTO/VALUES
Tabloya veri girişi için INSERT INTO/VALUES deyimi kullanılır. Yukarıda oluşturduğumuz tabloya veri girmemiz için;
INSERT INTO Ogrenci VALUES ('95530007', 'UMIT',
'SASMAZLAR', {15.02.1977}, 80, 'Bilgisayar');
Tablodaki Verileri Güncellemek : UPDATE
Tablodaki verileri güncellemek için UPDATE deyimi kullanılır. UPDATE komutunu da daha önceki örneklerde gördüğümüz gibi WHERE kalıbı gibi koşullu kullanabiliriz.
Örneğin bir kaydı düzeltmek istersek ;
UPDATE Ogrenci SET Okul_no='95530005', Ad = 'Yavuzhan' , Soyad='TAŞKENT', D_Tarihi={15.03.1980}, Not=85, Bolumu='İnşaat' WHERE okul_no='95530005';
Böylece INSERT INTO kalıbıyla girdiğimiz yukarıdaki 955530005 numaralı kaydı değiştirmiş olduk.
Örneğin tüm öğrencilerin notunu %10 artırmak istediğimizde;
UPDATE Ogrenci SET Not=Not*1.1;
deyimini kullanırız.
Elektronik bölümündeki öğrencilerin notlarını %20 düşürmek istediğimizde ise;
UPDATE Ogrenci SET Not=Not*0.8 WHERE Bolumu='Elektronik';
Tablodan Veri Silmek: DELETE
Bir tablodaki verileri silmek için DELETE komutu kullanılır. Örneğin Öğrenci tablosundaki tüm verileri silmek için;
DELETE * from Ogrenci ;
Notu 50'den küçük olan Bilgisayar bölümündeki öğrencileri silmek için;
DELETE * FROM Ogrenci WHERE Bolumu='Bilgisayar' AND Not<50;
Tabloya Sonradan bir KOLON Eklemek: ALTER TABLE
Bir tablo oluşturduğumuzu ve daha sonra bu tabloya yüzlerce kayıt girdiğimizi düşünelim. Tabloyu İlişkisel bir yapı oluşturabilmek için veya unuttuğumuz bir alanı ekleyebilmek için SQL'in ALTER TABLE komutundan yararlanabiliriz.
ALTER TABLE Ogrenci ADD dogum_yeri CHAR(30);
ALTER TABLE Ogrenci ADD Kredisi SMALINT NOT NULL;
Tablodan Sonradan bir KOLON Silmek: ALTER TABLE…DROP
Bir kolonu silmek için ALTER TABLE kalıbını kullanarak DROP komutunu kullanmamız gerekir. Öğrenci tablosundan doğum tarihlerini kaydettiğimiz alanı silmek için;
ALTER TABLE Ogrenci DROP D_Tarihi;
Not ve Bölümü bilgilerini aynı anda silmek için;
ALTER TABLE Ogrenci DROP Bolumu,Not;
Tablonun Kolonunu değiştirmek: ALTER TABLE…MODIFY
Önceden oluşturduğumuz bir tablonun alan uzunluğunu değiştirmek gibi bir ihtiyacımız olduğunda bu işlemi ALTER TABLE deyimi içinde MODIFY komutu ile yapabiliriz.
Yukarıdaki tabloda Ad alanını 30 olarak belirtmiştik. Daha sonra adı 30 karakteri geçen birini kaydetmek için aşağıdaki değişikliği yaparak "Ad " alanını 40 karakter alabilecek duruma getirebiliriz.
ALTER TABLE Ogrenci MODIFY Ad CHAR(40);
Hemen öğrendiklerimizin kısa bir özetine bakalım:
Tablo Yaratmak
CREATE TABLE deneme( Ad text ,Numara number null )
Yukaridaki Sql cümlesi deneme adli bir tablo yaratir ve Text datatype'i olan ad adli bir field ve Number datatype'i olan Numara adli bir field yaratir.
--------------------------------------------------------------------------------
Tablo Silmek
DROP TABLE deneme
Az önce yukarida yarattigimiz deneme adli tablo silinecektir.
--------------------------------------------------------------------------------
Tablo içine alan ekleme
ALTER TABLE deneme ADD Soyad text null
Deneme adli tablonun içerisine Text datatype'i olan Soyad adli bir field olusturur.
--------------------------------------------------------------------------------
Tablo içinden alan silme
ALTER TABLE deneme DROP Soyad
Deneme adli tablonun içerisineki Soyad adli field'i siler.
--------------------------------------------------------------------------------
Tablo içerisindeki alan ismini degistirme
ALTER TABLE deneme RENAME Ad Adiniz
Deneme adli tablonun içerisineki Ad adli field'in ismini Adiniz olarak degistirir.
--------------------------------------------------------------------------------
Tablo ismini degistirme
ALTER TABLE deneme RENAME TABLE denememek
Deneme adli tablonun ismini Denememek olarak degistirir.
Bir sonraki yazımızda Access ve Sql birlikte nasıl kullanılır onu göreceğiz. Bu yazıda SQL'in temel 4 komutunu gördük. Yazı bir alıntıdır, ben sadece konu başlıkları ilave edip daha anlaşılır şekle getirmeye çalıştım.
İnadına, ille de Accesstr.net...