SQL(Structured Query Language ) Structured Query Language (Yapısal Sorgulama Dili), veritabanı programlarında verileri sorgulamak için kullanılan bir veritabanı alt dilidir (sublanguage). Yani Pascal, Fortran, C, Basic, Java gibi dillerde kullanılan fonksiyonlar gibidirler. Bu dillerden yapılan çağrımlara da cevap verirler, fakat sadece veritabanındaki verilerle ilgilidirler. SQL in sahip olduğu özellikleri; veri tanıma, bütünlük kontrolü, veriye erişim, veri güncelleme ile ilgili sorgu komutları olarak sıralayabiliriz. SQL yukarıda adı geçen bilgisayar dillerinde bulunan yapıların tümüne sahip degildir. Örnegin SQL in bilgi giriş çıkış ekranı, ekran tasarımı, program algoritması yoktur. Bu nedenledir ki sql, kendisi ile etkileşimli bir başka dile (Delphi, C++, Oracle, DBase) gereksinim duyar. SQL in Önemi SQL in önemini anlamak için içinde yüklü miktarda veriyi sorgulayan bir programın tasarım aşamasını incelemek yeterli olacaktır. Büyük miktarlarda veri, örnegin; Tütkiyedeki nüfüs cüzdanı bilgilerini barındıran bir veritabanı üzerinde sorgulama yapan bir programın SQL siz yazılması çok zor ve bir o kadarda gereksiz bir yoldur. Bunun birkaç tane zorluğunu aşagıda sıralamaya çalışalım. Tütkiyedeki nüfüs cüzdanı bilgisi nin her kayıt’ı için İsim, Soyisim, Ana adı, Baba adı, Dogum yeri, İli, İlçesi derken yaklaşık 200 Baytlık alan gerekir. Türkiyenin ölmüş kişileri dahil 200000000 kayıt’ı bulunsun, bunların toplamı için 200.000.000*200=40.000.000.000 oda 40 Gbayt lık bir alan gerekir. Bu kadar veriyi içinde sorgulama yapmak oldukça zor olsa gerek. Büyük çaplı verileri saklayacak dosyayı işletim sistemimiz desteklemez. Kendiniz yazmalısınız. Bu iş oldukça zordur. Harddiske ulaşma, verilerin bir kısmını Rama aktarma, TSR programı, Cache ile uğraşmak, bunlara hükmetme kolay iş degildir. Hem bunlar için makine dilini biliyor olmanız gerekir. Verilere hızlı erişmek için verilerle ilgili agaçyapılarının bulunduğu meşhur algoritmaları bilmeniz ve uygulamanız gerekir. Özel algoritmalar kullanmazsanız Verilere hızlı erişmek için verilerle ilgili agaçyapılarının bulunduğu meşhur algoritmaları bilmeniz ve uygulamanız gerekir. Özel algoritmalar kullanmazsanız birkaç saniyede ulaşmanız gereken veriye belkide saatlerce ulaşamazsınız. Programınıza aynı anda birden fazla kullanıcı girdiginde veri paylaşımındaki trafiği çözmeniz gerekir. Uzaktaki bir bilgisayarın veritabanınıza bağlanması için TCP/IP protokolunude işin içine katmak gerekir. Veriler üzerinde degişiklik yapmak isteyen kötü niyetli kişilere karşi güvenlik duvarları geliştirmeniz gerekir. Biz veriler üzerinde çalışıyor iken biligsayar bizim kontrolumüz dışında kapansa ve tekrar açtığımızda veritananına ve enson girdiğimiz veriye tekrar ulaşabilmemeiz gerekir. Bunun içinde programmımıza gereklı kod satırları eklememiz gerekir. Tüm bunları yapmak ancak profesyonel ve büyük çaplı bir ekip in yıllarca çalışması sonucunun bir ürünü olabilir. Halbuki tüm bu işlemleri birazcık SQL ve birazcık programlama bilen herkes birkaç saat içinde yapabilir. İşte SQL in gücüde burdan gelir. SQL bunun için önemlidir. SQL’in Tarihçesi SQL 1970 yılının sonlarına doğru, San Jose tarafından California‘daki IBM araştırma laboratuarında geliştirilmiştir [1]. Geliştirilmiştir diyoruz çünkü ilişkisel veritabanı modelimi ortaya koyan E.F.Codd’un “A relational model for large shared data banks” adlı makalesi (1970) bu araştırmadan önce yayınlanmıştır. Bu dil ilk başlarda Structured English Query Language (SEQUEL) adı ile anılmaktaydı [2][3]. 1982 yılında ANSI (Amerikan Ulusal Standartlar Enstitüsü) bu dil üzerinde çalışmaya başlamış. 1983 yılında ANSI ve ISO (Uluslararası Standartlar Organizasyonu) birlikte SQL standartlarını yayınlamışlardır[3]. İlk SQL standart ını 1987 yılında ISO 9075 kodu ile yayınlayan ISO, 1989 da “bütünlük arttırımı özelligi” eklenmiş halini ISO 9076 kodu ile yayınladı. Bu arada ANSI, 1986 yılında x3.135 kodu ile yayınladığı SQL standartları ISO 9075 ile aynı idi [3]. SQL-89 diye tanınan ANSI 1989 standart’ı Moduler olması, Diger uygulama (Pascal, FORTRAN, COBOL, ve PL/1 gibi) programların kod satırlarının içine gömülebilme (Embedded) yani o programlaın koduymuş gibi davranış özelliği göstermesi bakımından önemlidir. Statik SQL anlamına gelen Embedded SQL, Dinamik SQL in gelişiminden önce en populer dil idi. İçinde Statik SQL kod satırları bulunan program derlendikten sonra, çalışma-zamanı içinde bu SQL kodlarına mudahele etmek mümkün degildi. Embedded SQL prensib olarak derleyiçiye paralel bir yorumlama içeriyordu buda programın performansını arttırıyordu esnekliği (flexibility) kaybetdiriyordu. ANSI 1992 standardı (SQL-92 diye de anılır.) SQL i (Giriş, Orta-seviye ve ,Tam) olam üzere üç kategöride geliştirerek evrensel bir dil yaptı. SQL-92 ile gelen yeni özellikleri aşagıdaki dört maddede toplayabiliriz. Veritabanlarına bağlanma (Connections to databases) Hareketli içleçler (Scrollable cursors) Dianamik SQl (Dynamic SQL) Tablolar arası dışsal bağlantı (Outer joins) Dinamik SQL, tasarım-zamanında olduğu gibi çalışma-zamanı içindede SQL komutlarımızı hazırlamamıza izin verir. Tüm bunlara ragmen Dinamik SQL in performansı Statik SQL in performansı kadar iyi degildir. Dynamik SQL de performans programcının algoritmasına bağlıdır. Dinamik SQL e örnek verecek olursak; ODBC veya Sybase in DB-Kütüphanesini verebiliriz. Yerel SQL (Local SQL) Nedir? Veritabanı ile işlem yapabilmek için bir adet veritabanı programınız olması gerekir. Genellikle 400$ ile 40000$ arası bir maliyete mal olan bu programlardan Paradox ve dBASE veritabanı programı Delphi ile birlikte bedava verilmektedir. Access, Paradox, dBASE gibi veritabanı programları Yerel SQL i desteklediği için, önemlidirler. Yerel SQL, SQL-92 nin (dBASE, Paradox, ve FoxPro tablolarına ulaşmak için oluşturulmuş) bir alt türevidir.SQL-92 aynı zamanda SQL Server i de içermektedir. Yerel SQL ifadelerine uygulamalarımızda erişilirken, BDE (Borland Veritabanı Motoru) bu ifadeleri BDE API fonksiyonlarına dönüştürür. BDE içinde Yerel SQL dili; Veri işletme dili (Data Manipulation Language) ve Veri tanımlama dili (Data Definition Language ) olmak üzere iki kategoriye ayrılır. DML tablo verilerini taramak, eklemek, güncellemek ve silmek için kullanılan SQL ifadeleri içerir. SELECT, DELETE, INSERT, UPDATE birer DML ifadelerindendir. DDL tabloları oluşturmak, değiştirmek, ve silmek için kullanılan SQL ifadelerini içerir. CREATE TABLE ve DROP INDEX birer DDL SQL ifadelerindendir. Aşağıdaki bilgilerin çoğu DELPHI ile birlikte gelen ve E:\Program Files\Common Files\Borland Shared\BDE dizinini altında bulunan LocalSQL.Hlp dosyasından esinlenerek yazılmıştır.