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 zennedecek :) ) Neyse bugün kü 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 matemetiksel 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. (Malesef tüm veri tabanı uygulamarı üç 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 bazı versiyonlarıda bulunmaktadır, veri tabanları hangi SQL versiyonuna destek verdiklerini belirtirler. Bu versiyonları biraz 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 sedece; 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 kayıdı veya SELECT cümlesi ile bulunmuş bir kümeyi tabloya eklemektir.
Örnek vermek gerekir ise;
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.
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.

30.07.2007-11:26'de dedi şöyle dedi;
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.
31.07.2007-15:37'de dedi şöyle dedi;
Rica ederim :) Programlama derken ?
29.08.2007-19:18'de dedi şöyle dedi;
teşekkürler.
22.09.2007-19:54'de dedi şöyle dedi;
SQL:SELECT,UPDATE,INSERT,DELETE
23.11.2007-11:08'de dedi şöyle dedi;
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..
26.11.2007-11:09'de dedi şöyle dedi;
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.
27.11.2007-9:15'de dedi şöyle dedi;
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…
27.11.2007-16:43'de dedi şöyle dedi;
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.
28.11.2007-13:20'de dedi şöyle dedi;
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…
18.02.2008-4:30'de dedi şöyle dedi;
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 ;)
19.02.2008-20:24'de dedi şöyle dedi;
Ben teşekkür ederim Gürkan.. :)