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.
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.
Rica ederim :) Programlama derken ?
teşekkürler.
SQL:SELECT,UPDATE,INSERT,DELETE
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..
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.
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…
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.
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…
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 ;)
Ben teşekkür ederim Gürkan.. :)
merhaba bu sql için derleyici var mı yeni başlıyorum da
Merhabalar Cenk,
Derleyici derken ne demek istediÄŸini anladım sanırım. My SQL‘in ücretsiz versiyonu bu anlamda iÅŸine yarayabilir.
tesekkurler
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…
sql den resim çekmek için kodlara ihtiyacım var :)
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 :)
SQL NEDÄ°RRRR?
sql bir programlama dili deÄŸildir.