SQL nedir, ne deÄŸildir ?

Merhabalar arkadaÅŸlar,

“Uzun bir aradan sonra tekrar birlikteyiz ben …” ÅŸeklinde bir cümle kurmayacağım, ben de biliyorum bu aralar tembelleÅŸtim, önceden ne güzeldi sık sık ve güzel güzel yazıyordum ama ya ÅŸimdi aradan aylar geçmesi gerekiyor, elime kalem alabilmem için :P (Duyan da gerçek yazar zannedecek :) ) Neyse bugün ki konumuz “SQL nedir, ne deÄŸildir ?”

Åžimdi aklınızda şöyle bir soru olabilir “beee adam canın mı sıkıldı oturuyorsun SQL hakkında yazı yazıyorsun ?”. Olabilir diyorum ya olabilir, illa olacak diye bir kaide yok. Ben size genede nedenini söyleyeyim, memleketimin yazılımcılarının SQL ile arasının pek olmaması nedeni ile bu yazıyı yazıyorum. Açıklayıcı olması için ve gerçek örneklerle bu yazıyı yazmaya çalışacağım, gariplikler görürseniz ÅŸaşırmayın.

Öncelikle bu SQL ne değildir ? sorusuna cevap arayalım. SQL programlama dili animasyon yapımında, gelişkin matematiksel işlemlerde veya işletim sistemi yazımında kullanılmaz, kullanan var ise hemen anlından öpeyim bitsin bu çile.

Peki nedir bu SQL ? diye soracak olursanız;
– Sadece veriler üzerinde iÅŸlem yapmak için tasarlanmıştır. Bu nedenle basit anlamda 4 adet iÅŸlemden oluÅŸur. Bu iÅŸlemler listeleme, güncelleme, ekleme ve silmedir. (SELECT, UPDATE, INSERT, DELETE)
– Kendi kendine herhangi bir ÅŸekilde çalışamaz, veri tabanı uygulamaları tarafından veriler üzerinde iÅŸlemler yapabilmek için kullanılırlar. (Maalesef tüm veri tabanı uygulamaları üç aÅŸağı beÅŸ yukarı, ufak da olsa bir takım farklılıklarla SQL dilini destekler.)
– Sonuç olarak, SQL programlama dili veri tabanı uygulamaları tarafından derlenen ve çalıştırılan (bu nedenle veri tabanı uygulamasına göre çalışması deÄŸiÅŸebilen), sadece verilere hükmetmek için kullanılan, evrensel bir programlama dilidir.

http://en.wikipedia.org/wiki/SQL adresinden daha fazla bilgiye ulaşabilirsiniz. Hemen belirtmem gereki ki; SQL programlama dilinin versiyonları vardır, veri tabanı uygulamaları hangi SQL versiyonuna destek verdiklerini belirtirler. Bu versiyonları tarif etmek gerekir ise;
SQL-86: BildiÄŸimiz standart SQL cümlelerinden oluÅŸur, herhangi bir ek yoktur. Kısaca tüm dünyanın ~%95’i sadece bu kadarlık kısmını kullanılır.
SQL-1999: Bildiğimiz SQL cümlelerinin üzerine birçok yeni özellik eklenmiştir ki saymakla bitmez, kısaca SQL programlama dilinin programlama dili olduğu versiyon bu versiyondur.
SQL-2003: Tüm bu özelliklere XML ile çalışabilme özelliği eklenmiş ve ortaya bu versiyon çıkmıştır.
SQL-2006: Artık bu versiyonda XML entegrasyonu konusunda ‘Yok artık löbran ceyms’ konumuna ulaÅŸmış ve XQuery (XML Query Language)’de desteklemeye baÅŸlanmıştır.

Sizleri çok endiÅŸelendirmeden hemen konumuza girelim; Biz bu yazımızda sadece; SQL-86’yı inceleyeceÄŸiz. Ä°ÅŸe sizlere küçük bir ipucu vermek ile baÅŸlayacağız, (bu belirteceÄŸim ipucu SELECT cümlesi içerisinde listeme sırasında veri üzerinde herhangi bir deÄŸiÅŸikliÄŸin yapılmadığı durumlarda geçerlidir) aslında ‘INSERT’ hariç tüm cümleler bir çeÅŸit ‘SELECT’ cümlesidir tek bir farkla ‘UPDATE’ kayıtları ekrana yazmak yerine güncellerken, ‘DELETE’ ise kayıtları siler. INSERT’in durumu ise, çok vahimdir iÅŸi gücü belirtilen tek kaydı veya SELECT cümlesi ile bulunmuÅŸ bir kümeyi tabloya eklemektir.

Örnek vermek gerekir ise;

SELECT *
   FROM Customer
-- OR
DELETE *
   FROM Customer
-- OR
UPDATE Customer
     SET Name = 'Hebele'
-- Farklı olan INSERT
 INSERT 
    INTO Customer (Name) 
VALUES ('Hebele2')

Yukarıda belirtiğim gibi aslında sizler SELECT cümlesini öğrendiğinizde geri kalan tüm işlemleri aşağı yukarı öğrenmiş olursunuz. Şimdi bu nedenle bizler SQL programlama dilinin en önemli özelliği olan SELECT cümlesi üzerine yoğunlaşacağız.
Hemen ikinci ipucunu verelim; SELECT cümleleri içerisinde yer alan komutlar üçe ayrılır. Bunlardan birincisi verileri süzme iÅŸlemidir bu iÅŸlem WHERE alt cümlesi ile yapılır, baÅŸka bir komut ile süzme iÅŸlemi yapılmaz. Ä°kinci komut sıralama iÅŸlemidir, sadece ‘ORDER BY’ alt cümlesi ile yapılır. Ä°ÅŸte iÅŸin zor kısmı listeme sırasında yapılacak iÅŸlemler için ise ‘GROUP BY, HAVING, ROWNUM, LIMIT, TOP, COUNT, MAX, MIN, AVARAGE……’ ve daha zilyon tane alt cümle kullanılabilir, tüm bunların hepsi yani WHERE ve ORDER BY haricindekiler, oluÅŸan liste üzerinde deÄŸiÅŸiklik yapar veya liste üzerinden farklı listeler, farklı veriler elde etmeye yararlar.

Örnek vermek gerekir ise; Yeri gelmişken SQL cümleleri nasıl okunmalıdır, bunun da örneğini yapalım.

SELECT Name, Price -- Name ve Price alanlarını göster
  FROM Customer -- Customer'ın
WHERE Price < 100 -- Price'ı 100'den küçük olanların
ORDER BY Price DESC -- Price bilgisi büyükten küçüğe doğru sıralanmış olsun.
-- Peki biz 100'un altında kaç tane kayıt olduğunu öğrenmek istersek
SELECT COUNT(*)
  FROM Customer
WHERE Price < 100
-- Peki biz 100'ün altında yer alan fiyatlardan hangisinden kaç tane bulunduğunu öğrenmek istersek;
SELECT Count(*), Price
  FROM Customer
WHERE Price < 100
GROUP BY Price

Bir sonraki yazımızda SELECT konusuna daha fazla değineceğiz.

Kolay gelsin.

SQL nedir, ne deÄŸildir ?” üzerine 20 yorum

  1. Yine iyi bir yazı olmuÅŸ, teÅŸekkürler. Bilgimizi pekiÅŸtirdik :P . Programlama konularında daha çok makaleler olması gerektiÄŸine inanıyorum. Bu arada SQL-86 … SQL-2006 olayları ilginçmiÅŸ, bunu daha bi araÅŸtırayım.

  2. Merhabalar, Benim group by ile ilgili büyük bir sorunum var..
    select fisno,sum(tutar),ba from table_name group by fisno,ba
    bu sql çok normal deÄŸil mi? Bence de ama bu sql de gruba ba gönderirsem baÅŸka rakam dönüyor göndermezsem baÅŸka rakam dönüyor. Diceksiniz ki ÅŸimdi “ba” datasında farklılık vardır. Ama yok inanın yok.. Data aynen şöyle
    fisno tutar ba
    1 10 A
    1 20 A
    1 5 A
    Bir fikri olan varsa. Bekliyorum..

  3. Merhabalar,

    SELECT fisno, SUM(tutar), ba
    FROM table_name
    GROUP BY fisno, ba

    cümlesinin anlamı; ‘table_name’ içerisinde yer alan kayıtları herhangi bir kritere baÄŸlı olmaksızın getir (WHERE cümlesi yok) bu getirdiÄŸin kayıtları fisno ve ba’ya göre grupla ve bu gruplama sonucunda her group icin tutar bilgisini topla ve fisno, SUM(tutar), ba sırası ile bana ver.

    EÄŸer ba’yı gruba göndermemekten aÅŸağıdaki SQL cümlesini anlatmak istiyorsan;
    SELECT fisno, SUM(tutar), ba
    FROM table_name
    GROUP BY fisno

    Bu cümle çalışmaz, çünkü eÄŸer group by içerisinde kullanmazsan “ba” bilgisini istemeyezsin. Bunun nedeni SQL derleyicisi verilere bakmadan hareket eder, “ba” bilgisinin farklı olabileceÄŸini anlar ve bu aÅŸamada cümlenin iÅŸlenmesini durdurur. EÄŸer sen bu garantiyi veriyorsan senin bu alanı GROUP BY’a eklemen gerekir.

    Daha fazla bilgi için Select, Group By, Having yazısını inceleyebilirsin.

  4. Cevabın için teÅŸekkür ederim. Ben ba’yı gruba göndermemek derken
    SELECT fisno, SUM(tutar)
    FROM table_name
    GROUP BY fisno bahsediyordum.
    Sorun ile ilgili oracle dan yardım aldık sorun oracle 10g nin bir bug’ıymış. service pack leri indirince düzeldi. Ä°lginiz için teÅŸekkürler…

  5. Rica ederim. Demek 10g’de bu ÅŸekilde bir bug var.. “Oracle’ın çıkardığı problemlerin %80 isimlerden dolayıdır” tezini destekliyor mu ? diye merak ettim açıkcası. Yoksa basit bir group by iÅŸleminde hata yapmazlar.. yapsalar bile bu zamana kadar ben duyardım diye tahmin ediyorum.

    Kolay gelsin.

  6. Bu hata her zaman gerçekleÅŸmiyordu. Bazen doÄŸru bazen yanlış getiriyordu. Biliyorsun ki Group by ifadesi de bir order aynı zamanda.. Sanırım sorun sıralamasında çünkü veri sonuçlarını sıralama yanlış gibi getiriyordu. Group by önce order edip sonra sum/avg/count v.s. yapıyor. Dolayısıyla order doÄŸru olmayınca sum deÄŸeri de doÄŸru olmadı.. iyi günler…

  7. Teşekkürler :)

    Fazla mı takıntılıyım bilmiyorum ama:
    DELETE “deyineceÄŸiz”
    FROM text
    INSERT
    INTO text (silinen yer)
    VALUES (‘deÄŸineceÄŸiz’)

    Yol yanlış olabilir kusura bakmayın ;)

  8. merhaba bu sql için derleyici var mı yeni başlıyorum da

  9. Merhaba Tankut. internete gezerken farkettim siteni. Ä°ÅŸ hayatının yoÄŸunluÄŸunda paylaşıma ne yazık ki vakit bulamazken burada deneyimlerini paylaÅŸman çok güzel. Bu arada artık Vodafone’da deÄŸilim. Digiturkte çalışıyorum. Belki birgün tekrar aynı ortamda çalışma imkanımız olur… Kendine iyi bak. teÅŸekkürler…

  10. AD USN artırmaya bakıyordum geldiÄŸim yere bakın:) acaba artık SQL mi çalışsam :) vardır bunda bir hayır…

    select
    update job
    Sql Admin:)

    –ilk sql de yazdığım ÅŸey:))

    cumartesi sabah 07:00 :)

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir