Açılımı structured query language olan SQL, bugün birçok bankacılık sistemi, kamu kurumu ve e-ticaret sitesi tarafından kullanılıyor. Birçok kurum verilerini veri tabanlarında tutuyor. Daha geniş ölçekte örnekler vermek gerekirse bir antivirüs yazılımı olan Kaspersky, bir çizim ve PLM yazılımı olan Siemens NX, bir yedekleme yazılımı olan Veeam, bir firewall üreticisi olan Fortinet ve Wachguard verilerini veri tabanlarında tutuyor. SAP, Microsoft, Oracle gibi dünya devlerinin geliştirdiği ERP, CRM veya finans yazılımları arka planda verilerini veri tabanı sistemlerinde tutmakta ve bu veriler SQL dili ile sorgulanmakta.
SQL tarihsel yolculuğuna 1970’li yıllarda IBM tarafından geliştirilen SQUARE isimli bir sorgulama dili olarak başladı. Daha sonra biraz matematiksel işlemleri andırdığı düşünülerek adı, SEQUEL (Structured English Query Language) olarak değiştirildi. Ancak bunun da İngiltere’de bir uçak şirketinin ismi olması nedeniyle kullanımına izin verilmedi ve isim SQL olarak değiştirildi. Değiştirilmesine rağmen halen bazı yerlerde SEQUEL olarak anıldığına şahit olabilirsiniz. Biz SQL demeyi tercih ediyoruz. Türkçesi ise yapısal sorgulama dili.
İlk bakışta Türkçeye yanlış çevrildiği düşünülse de aslına bakarsanız bu, anlamı tam olarak karşılayan bir çeviri. Ortada bir veri var. Bu veri dağınık bir veri değil. Belirli bir sistematiği olan, satırları, sütunları ve belli sınırlamaları olan bir tablo verisi. Yani öyle resim, video, ses gibi dağınık bir yapısı yok. Aksine bir veritabanı içerisinde bulunan yapısal bir veri. Amacımız ise bu veriyi sorgulamak ve analiz etmek. Tüm bu işlemleri gerçekleştirirken de kendi içerisinde bir sistematiği, syntaxı, belli komutları ve kuralları olan bir dile ihtiyacımız var. İşte tüm bunları birleştirince karşımıza çıkan kavram yapısal sorgulama dili oluyor.
Özünde içerisinde belli bir yapısal veri bulunduran her şey bizim için bir veri tabanıdır. Örneğin bir Excel dosyası bizim için bir veri tabanı olarak düşünülebilir. Görseldeki her bir sheet bir tablo. Her bir tablonun içinde ise satır ve sütunlar bulunmakta.
Benzer şekilde belli formatlarda veriyi içerisinde tutan CSV ya da TXT formatındaki dosyalar da bizim için bir veri tabanıdır. CSV ya da TXT kendi içerisinde virgül ya da başka bir karakter ile ayırt edilmiş bir veri seti barındırabilir. Görselde CSV (comma seperated values) formatında bir dosyanın içeriğini görüyorsunuz.
Bunlara benzer birçok örnek verilebilir ancak şimdilik bu kadarı yeterli.
Bütün bu örneklerde aslında yapısal bir veriden bahsediyoruz. Her bir tabloda her bir sütunun sınırlamaları var. Doğum tarihi alanına tarih formatında veri yazabiliyoruz. ID alanına bir sayı formatında veri yazabiliyoruz. Aynı şekilde ad soyad bilgisini tuttuğumuz alana metin türünde veri yazabiliyoruz. Bu sınırlamaların olması bu veriyi daha kolay sorgulanabilir yapıyor. Bir de veri tabanı yönetim sistemi dediğimiz yapılar bulunuyor. Bu yapılara örnek olarak Microsoft SQL Server, Oracle, PLSQL ve MySQL gibi platformları verebiliriz.
Aslında her veri tabanı yönetim sistemi bir veri tabanıdır ancak her veri tabanı bir veri tabanı yönetim sistemi değildir. Konuyu biraz daha açalım:
Access, Excel gibi ortamlarda hazırlanan ve içerisinde veri barındıran dosyaları SQL ya da benzeri bir araç ile sorgulamak istediğimizde bu işlemleri gerçekleştirmek için kullanıcı bilgisayarının kaynaklarını, yani kullanıcının RAM, CPU ve diskini kulanırız. Oysa veri tabanı yönetim sistemlerinde bir sunucu vardır ve gelen komutlara göre içerisinde barındırdığı veriyi sorgular. Bunun için tamamen kendi kaynaklarını kullanır ve kullanıcıya sonucu gönderir. Bu haliyle veri tabanı yönetim sistemleri kendi içlerinde belirli bir sistematik doğrultusunda hizmet verebilecek yapılardır. Önemli olan nokta bu sistemler ile konuşabilmektir.
Bu noktada SQL dili büyük bir misyon taşımaktadır. Zira SQL, tüm veri tabanlarının ve veri tabanı yönetim sistemlerinin standart olarak kabul ettiği ortak bir sorgulama dilidir. Örneğin siz şehri “İSTANBUL” olan müşterilerin listesini çekmek istediğinizde “SELECT * FROM CUSTOMERS WHERE CITY=’İSTANBUL’” komutunu kullanırsınız ve bu komut tüm veri tabanlarında geçerli bir komuttur.
Hazır bu örneği vermişken SQL dilinin komutlarından da biraz bahsedelim. SQL’in çok az komutu vardır. Bu anlamda öğrenmesi oldukça kolaydır. Temelde bir veri tabanında yaptığımız işlemler bellidir:
Veriyi çekmek için kullandığımız komut SELECT komutudur.
SELECT KOLON1,KOLON2,KOLON3….
FROM TABLOADI
WHERE ŞARTLAR
Eğer tabloda bulunan tüm kolonları çekmek istersek
SELECT * FROM TABLOADI WHERE ŞARTLAR
komutunu kullanırız.
Yeni bir veri kaydetmek içinse INSERT komutunu kullanırız. Bu komut aşağıdaki gibi kullanılır.
INSERT INTO TABLO (KOLON1,KOLON2….)
VALUES (DEĞER1,DEĞER2…)
Örneğin CUSTOMERS tablosuna yeni bir kayıt eklemek istiyorsak kullanacağımız komut aşağıdaki gibidir.
INSERT INTO CUSTOMERS (NAMESURNAME, GENDER, BIRTHDATE, CITY, TOWN, TELNR)
VALUES ('ÖMER ÇOLAKOĞLU','E','1990-12-11','İSTANBUL','KADIKÖY','123445566')
Mevcut bir verideki bir ya da birden fazla kolonu ve satırı güncellemek için kullandığımız komut ise UPDATE komutudur. Aşağıdaki gibi kullanılır.
UPDATE TABLO SET KOLON1=DEĞER1,KOLON2=DEĞER2…. WHERE ŞARTLAR
Örneğin adı Ömer ÇOLAKOĞLU olan bir kişinin şehrini ANKARA ve ilçesini ÇANKAYA olarak değiştirmek için aşağıdaki komut kullanılır.
UPDATE CUSTOMERS SET CITY='ANKARA',TOWN='ÇANKAYA' WHERE NAMESURNAME='ÖMER ÇOLAKOĞLU'
Burada eğer WHERE komutundan sonra bir filtre vermeseydik tablodaki herkesin şehrini ANKARA ve ilçesini ÇANKAYA olarak güncellemiş olurduk.
Bir de veri silmeye ihtiyacımız olacak. Bunun için kullanacağımız komut ise DELETE komutu. Kullanımı ise şu şekilde:
DELETE FROM TABLO WHERE ŞARTLAR
Örneğin Ömer ÇOLAKOĞLU kişisini silmek istersek kullanacağımız komut aşağıdaki gibi olacaktır.
DELETE FROM CUSTOMERS WHERE NAMESURNAME=’Ömer ÇOLAKOĞLU’
Aynı UPDATE komutunda olduğu gibi burada da WHERE komutundan sonra bir filtre vermeseydik bu kez tablodaki tüm kayıtları silmiş olacaktık.
Dört komuttan kabaca bahsettik: Select, Insert, Update, Delete. SQL içinde en çok kullandığımız komutlar bu dört komut olup bu komutlara DML (Data Manipulation Language) komutları denir.
Ek olarak tablolar, veri tabanları gibi yapıları oluşturduğumuz, değiştirdiğimiz ve sildiğimiz komutlar vardır ki bunlara da DDL (Data Definition Language) komutları denir.
Bu komutlar CREATE, ALTER ve DROP komutlarıdır.
Toplamda yedi komuttan bahsettik ve bu komutlar SQL dilinin gerçekten çok büyük bir kısmını oluşturuyor. Konu hakkında bilgisi olmayanlar şu yorumu yapabilir: “Madem bu SQL dili bu kadar az komuta sahip o zaman tamam bunları öğrendik mi yeterlidir.“ Bu yorum teorik olarak doğru olabilir ama pratikte şöyle bir durum var:
Yapısal ya da bazı çevirilerde yapılandırılmış olarak tanımlanan veriyi analiz etmek için SQL dilini kullanırız. Sözel olarak sorulan bazı sorulara analitik olarak cevap arar ve bu cevabı getirecek SQL sorgularını yazarız. Örneğin
gibi senaryolar SQL sorguları ile rahatlıkla çözülebilir.
İşte bu senaryolarda yukarıda öğrendiğimiz komutlar yeterli değildir. Gerçek sistemlerin veri tabanlarında yüzlerce tablo bulunabilir ve bu tablolar birbiri ile bir ilişki (relation) içindedir. Yine bu tablolarda milyonlarca satır veri bulunabilir. Bu ilişkiler üzerinden JOIN ve AGGREGATE dediğimiz komutlar kullanılarak sorgular yazılır ve istenen sonuçlar elde edilir.
SQL özünde çok az komutu olan ama çok şey yapabilen bir dildir. Burada çok şey yapabilmesinin yegane sebebi aslında sorgulama yapan kişidir. SQL ile veri tabanı sorgulama analitik düşünme yeteneği gerektirir. Bunun da temel yolu çokça SQL sorgusu yazarak günlük hayattaki sorulara veri ile cevap verebilecek alıştırmalar yapmaktır.
SQL, 1970’lerden bu yana çok gelişti. Microsoft, Oracle gibi veri tabanı yönetim sistemi geliştiren üreticiler SQL’i kendi uygulamaları için özelleştirdi. Örneğin Microsoft Transact-SQL, Oracle ise PLSQL dillerini geliştirdi. Bu diller o kadar yetenekli hale geldi ki herhangi bir programlama dilinde yapabileceğiniz hemen her şeyi bunlarla da yapabilirsiniz.
Özetle SQL dili 50 yıldır veri ile konuşmanın kadim dili olarak hayatımızdaki yerini koruyor.
SQL hakkında daha geniş kapsamlı bilgiye erişmek ve kariyerinizde SQL bilginizle fark yaratmak isterseniz Miuul'un sunduğu MS SQL Developer eğitimine göz atabilirsiniz.