Anasayfa » Web Programlama

SQL Nedir? – Komutları Nelerdir? {SQL Dersleri}

17 Temmuz 2009 Görüntülenme: 3.836 6 Yorum Yazar: ataguL
Kötüİdare ederOrtaGüzelMükemmel (Bu yazı 3 oy aldı. Ortalama Değeri: 4,67 oy dan 5)

Merhaba arkadaşlar,
Renkliteneke.com olarak sizlere birer webmaster olabilmeniz için elimizden geldiği kadar yardım etmeye çalışıyoruz. Geçenlerde ilkini Ahmet ikincisini ben(Tanju Atagül) olmak üzere Php ile MySQL Veritabanı İşlemleri – 1 ve Php ile MySQL Veritabanı İşlemleri – 2 yazıları ile Php ve MySQL’in bir arada nasıl kullanıldığını anlatmaya çalışmıştık. Şimdi ise bir İYS (İçerik Yönetim Sistemi) yazabilmeniz için kesinlikle bilmeniz gereken, hem de çok iyi bilmeniz gereken, SQL’i anlatmaya çalışacağız.
Dersleri phpMyAdmin üzerinden anlatacağım. Eğer bilgisayarınızda phpMyAdmin yoksa nasıl kurulduğunu öğrenmek için şu yazıyı okuyabilirsiniz. phpMyAdmin kurulu ise hemen derslerimize geçelim.

SQL nedir?

- SQL’in açılımı Structured Query Language(Yapısal Sorgu Dili)’dir.
- SQL, veritabanlarına erişmenize ve onları yönetmenize izin verir.
- SQL bir ANSI* standardıdır.
*ANSI; American National Standards Institute (Amerikan Ulusal Standartlar Enstitüsü).

Peki ne işe yarar?

SQL,

- Veritabanında sorgu yapabilmeyi,
- Veritabanından veri çekebilmeyi,
- Veritabanına kayıt ekleyebilmeyi,
- Veritabanındaki kayıtları güncelleyebilmeyi,
- Veritabanından kayıt silebilmeyi,
- Yeni veritabanları oluşturabilmeyi,
- Veritabanlarına yeni tablolar oluşturabilmeyi,
- Veritabanında stored procedure(Saklı Yordam)’lar oluşturabilmeyi,
- Veri tabanında görünümler oluşturabilmeyi,
- Tablolarda, yordamlarda, görünümlerde izinleri ayarlayabilmeyi sağlar.

Tablolar

Bir veritabanı genellikle bir veya daha fazla tablodan oluşur. Her tablonun kendine özel bir ismi vardır (personel, ogrenci gibi). Tablolar ise her satırda bir kayıt olmak üzere kayıtlardan oluşur. İşte size ufak bir tablo örneği;

Gördüğünüz gibi tablomuzda üç kayıt ve P_Id, LastName, FirstName, Address, City olmak üzere beş tane de sütun(kolon) var.

SQL İfadeleri

Veritabanında yapmanız gerekenlerin çoğu SQL ifadeleriyle yapılır. Örneğin aşağıdaki ifade “personel” tablomuzdaki bütün kayıtları seçecektir.

[sql]SELECT * FROM personel[/sql]

Evet SQL’in kısa bir tanımını yaptığımıza göre SQL öğrenmenin vakti geldi. Ancak başlamadan önce son birşey söylemek istiyorum;

Eğer gerçekten SQL öğrenmek istiyorsanız aşağıdaki örnekleri tek tek kendiniz yazıp uygulayın. Kopyala-yapıştır yaparak ya da hazır yazılmış dosyalar kullanarak öğrenmeniz mümkün olmayacaktır. Lafı daha fazla uzatmadan derslerimize başlayalım :)

Daha sonra SQL ifadeleriyle nasıl veritabanı ve tablo oluşturacağımızı öğreneceğiz ancak anlatıma en basit ifadelerden başlayacağımız için öncelikle bize içinde kayıtlar bulunan bir tablo lazım. Bu yüzden hemen phpMyAdmini açıyoruz.

Eğer yazılar ingilizce ise “1″ yazan yerden dili türkçe olarak değiştirebilirsiniz.
Sol tarafta mevcut veritabanlarını görüyorsunuz. Yeni bir veritabanı oluşturmak içinse “2″ yazan yere “deneme” yazıp oluştur butonuna basıyoruz.

Veritabanımızı oluşturduk. Şimdi de tablomuzu oluşturalım. Tablomuzun adı personel olsun. İsim kısmına “personel” yazıyoruz ve alan kısmına da tablomuzda kaç sütun olacağını yazıyoruz. Tablomuzda Personel numarası, adı, soyadı, adresi ve telefon numarası olmak üzere 5 sütun oluşturmak için Alan sayısı kısmına 5 yazıp git butonuna basıyoruz.

Karşımıza çıkan bu ekranda ise sütunlarımızın özelliklerini ayarlayacağız. Bu ekranda şimdilik bizi ilgilendiren kısımlar şunlar: Alan, Türü, Uzunluk, Boş, İndeks ve A_I.

İlk sütunumuz olan personel numarası sütununun bilgilerini girelim hemen.

Alan kısmına kısaca “p_no” yazalım, türüne INT seçiyoruz. Eğer tablomuzda çok fazla kayıt olacaksa BIGINT’de seçebilirsiniz. Uzunluk kısmını, ne kadar kaydımız olacağını bilmediğimiz için boş bırakabiliriz. Boş seçeneği işaretlemiyoruz. Eğer işaretlersek bu alanı boş olan kayıtları da tablomuza ekleyebiliriz ancak personel numarasının amacı her kayıda ayrı bir numara vermek olduğu için boş olmasına izin vermiyoruz. İndeks kısmından “Primery” seçeneğini seçiyoruz. Bu seçenek daha sonra veritabanımıza başka tablolarda eklediğimizde tabloları birbirine bağlayabilmemiz için gereklidir. Son olarak A_I kısmını işaretliyoruz. A_I, Auto Increment(Otomatik artırma) demektir. Girdiğimiz her kayıtta kendimiz numara eklemek yerine bu seçeneği işaretliyoruz ve veritabanı bizim için otomatik olarak kayıtlara numara veriyor.

Diğer dört sütun içinse alan kısımlarına sırasıyla “Ad”, “Soyad”, “Adres”, “Tel” yazıyoruz. Türlerini varchar seçiyoruz. Uzunluk kısımlarına tahmini olarak maksimum karakter sayısı yazıyoruz. Ben sırasıyla şu sayıları yazdım; “20″, “20″, “50″, “11″. Boş kısmında boş kalabilecek alanları işaretliyoruz. Mesela Adres sütunumuzu boş bırakabiliriz. Bu alanlar için indeks ve A_I vermiyoruz.

Şimdi resimde gördüğümüz gibi üst menüden ekle kısmına gelip yeni bir kayıt giriyoruz ve git butonuna basıyoruz. Aynı şekilde ekle kısmına gelip birkaç kayıt daha ekliyoruz. p_no sütununu boş bırakabilirsiniz, otomatik arttır dediğimiz için kendiliğinden eklenecektir. Eğer ilk kaydımızda da yazmasaydık kayıtlarımız 0′dan başlayacaktı. Son olarak menüdeki gözat kısmından eklenmiş kayıtları görebiliriz. Benim personel tablom şu şekilde oldu;

Veritabanı ve tablomuzu oluşturduğumuza göre SQL ifadelerine geçebiliriz.

SELECT İfadesi

Select ifadesi veritabanından veri seçmek için kullanılır. Sonuçlar da bir tabloda geri döner. Bu tabloya “sonuç kümesi” denir.

Kullanımı:

[sql]SELECT sütun_ad(lar)ı
FROM tablo_adı[/sql]

ve

[sql]SELECT * FROM tablo_adı[/sql]

Örnek:

[sql]SELECT Ad,Soyad FROM personel[/sql]

Bu ifadeyi çalıştırdığımızda, veritabanına şunu demiş oluyoruz; personel tablosundaki kayıtların sadece Ad ve Soyad sütunlarını seç. Sorguyu çalıştırmak için phpMyAdmin’de üstteki menüden SQL kısmına geliyoruz, ifademizi buraya yazıyoruz ardından git butonuna basıyoruz. Sonuç tablomuz şu şekilde olmalı:

SELECT * için de bir örnek yapalım.

[sql]SELECT * FROM personel[/sql]

Bu ifade de şu anlama gelmektedir. Veri tabanındaki kayıtların bütün sütunlarını göster. Bu ifadeyi çalıştırdığımızda tablomuzdaki tüm kayıtları tüm sütunları ile birlikte göreceksiniz.

DISTINCT İfadesi

Tablomuzdaki bazı kayıtların sütunlardaki değerleri aynı olabilir. Eğer bir sütundaki değerlerden sadece farklı olanları görmek istersek bu ifadeyi kullanıyoruz. Kullanımı şu şekilde:

[sql]SELECT DISTINCT sütun_ad(lar)ı
FROM tablo_adı[/sql]

Şimdi tablomuzda kaç farklı isim var bunu öğrenelim.

[sql]SELECT DISTINCT Ad FROM personel[/sql]

Bakalım sonucumuz ne oldu;

Gördüğünüz gibi tablomuzda 5 kayıt vardı ama 4 kayıt döndü. Çünkü ismi “tanju” olan 2 kaydımız vardı ama sadece bir tanesi gösterildi.

WHERE İfadesi

Bu ifade seçeceğimiz kayıtları filitrelemede kullanılır.Kullanımı şöyledir:

[sql]SELECT sütun_ad(lar)ı
FROM tablo_adı
WHERE sütun_adı koşul değer[/sql]

Şimdi tablomuzdan sadece ismi tanju olan kayıtları seçelim.

[sql]SELECT * FROM personel
WHERE Ad=’Tanju’[/sql]

Bu ifadenin anlamı şudur: personel tablosunda adı tanju olan kayıtların tüm bilgilerini göster. Sonuç olarak iki kayıt dönecektir. Tanju atagül ve tanju çolak. Dikkat ettiyseniz eşittirden sonra tanju ismini tırnak içine aldık. SQL’de yazılar için tırnak kullanmamız gerekir. Eğer kullanmazsak sorgumuz düzgün çalışmayabilir. Numaralarda ise kullanmamamız gerekir. Kısaca,
WHERE Ad=tanju kullanımı yanlıştır. Doğrusu şu şekilde olmalıdır; WHERE Ad=’tanju’
Numaralar içinse doğru kullanım;
WHERE p_no=2
yanlış kullanım;
WHERE p_no=’2′

WHERE ifadesinde kullanabileceğiniz koşullar şunlardır:

= eşit
<> eşit değil
> büyük
< küçük
>= büyük eşit
<= küçük eşit
BETWEEN arasında
LIKE İleriki derslerde ayrıntılı açıklanacaktır.
IN İleriki derslerde ayrıntılı açıklanacaktır.

AND ve OR operatörleri

Bu operatörler kayıtlarımızı birden fazla şarta göre filitrelememizi sağlar.
AND(ve) operatörü her iki şartta doğruysa kayıtları gösterir.
OR(veya) operatörü şartlardan herhangi birisinin doğru olması durumunda kayıtları gösterir.
Şimdi tablomuzdan adı Ahmet soyadı Ertürk olan kaydı seçelim.

[sql]SELECT * FROM personel
WHERE Ad=’Ahmet’ AND Soyad=’Ertürk’[/sql]

Bu ifadeyi şu anlama gelmektedir; adı Ahmet soyadı da Ertürk olan kayıtların bütün bilgilerini göster. Bu şarta uyan tek bir kaydımız olduğu için sonuç kümesinde tek bir kayıt göreceksiniz.

Şimdi de adı Ahmet ya da Murat olan kayıtlarımızı seçelim.

[sql]SELECT * FROM personel
WHERE ad=’Ahmet’ OR ad=’Murat’[/sql]

Bu ifade ise şu anlama gelmektedir; adı Ahmet veya Murat olan kayıtların tüm bilgilerini göster. Bu şarta uyan iki kaydımız olduğu için sonuç kümesinde iki kayıt göreceksiniz.

Peki AND ve OR’u birarada kullanabilir miyiz? Evet, kullanabiliriz. Ancak işlemlerin karışmaması için aynı matematikte olduğu gibi parantez kullanmalıyız. Şöyle ki;

[sql]SELECT * FROM personel
WHERE ad=’Tanju’ AND (soyad=’Atagül’ OR soyad=’Ertürk’)[/sql]

Bu ifademizin açıklaması da şöyledir; adı Tanju olan ve soyadı Atagül ya da Ertürk olan kayıtların tüm bilgilerini göster. Bu şartımıza uyan tek bir kayıt bulunmaktadır(Tanju Atagül). Bu yüzden sonuç kümemizde bir kayıt görüntülenecektir.

ORDER BY kelimesi

ORDER BY kelimesi sonuç kümemizi istediğimiz kolona göre sıralamada kullanılır. ORDER BY varsayılan olarak sonuç kümesini artan (A’dan Z’ye) sıralar. Eğer azalan sıralamak istersen DESC kelimesini kullanmamız gerekir.

[sql]SELECT sütun_ad(lar)ı
FROM tablo_adı
ORDER BY sütun_ad(lar)ı ASC|DESC[/sql]

Dediğim gibi ORDER BY varsayılan olarak artan sıralar. Yani ASC’yi yazsanız da yazmasanız da artan sıralayacaktır. Ancak azalan sıralamak için DESC yazmalısınız. Şimdi tablomuzdaki bütün kayıtları seçip isme göre A’dan Z’ye sıralayalım.

[sql]SELECT * FROM personel
ORDER BY ad[/sql]

Gördüğünüz gibi kayıtlarımız Ad sütununa göre artan sıralanmış durumda. Şimdi bir de azalan sıralayalım.

[sql]SELECT * FROM personel
ORDER BY ad DESC[/sql]

Gördüğünüz üzere sonuç kümemiz Ad sütununa göre azalan sıralanmış durumda. Önceki örneğin tam tersi şekilde.

INSERT INTO ifadesi

Bu ifade tablomuza yeni bir kayıt eklemede kullanılır. INSERT INTO ifadesi iki şekilde kullanılabilir.

Birincisi sütun adlarını yazmayıp sadece değerlerini yazarak;

[sql]INSERT INTO tablo_adı
VALUES (değer1, değer2, değer3,…)[/sql]

İkinci kullanım ise hem sütun adlarını hemde değerlerini yazarak;

[sql]INSERT INTO tablo_adı (sütun1, sütun2, sütun3,…)
VALUES (değer1, değer2, değer3,…)[/sql]

Hemen ilk kullanıma uygun bir örnek yapalım;

[sql]INSERT INTO personel
VALUES (”,’Will’, ‘Smith’, ‘ABD’, ’123456′)[/sql]

Sütun adlarını yazmadan kayıt ekliyorsak değerlerimizi tablomuzdaki sütun sırasına göre yazıyoruz. İlk sırada p_no vardı. Otomatik artırma yaptığımız için boş bıraktık, sonra isim, soyisim, adres ve telefon sütunlarını yazdık. Böylelikle yeni bir kayıt eklemiş olduk. Eklendi mi diye kontrol etmek için hemen tüm kayıtlarımızı seçiyoruz(SELECT * FROM personel). Yeni kaydımızın personel numarası 6 olarak eklendiğini göreceksiniz.

Şimdi de ikinci kullanıma göre örnek yapalım. Bu kullanımı genellikle belli sütunlara veri ekleyeceğimizde kullanırız. Şöyle ki;

[sql]INSERT INTO personel (Ad, Soyad, Tel)
VALUES (‘Vin’, ‘Diesel’, ’123456′)[/sql]

UPDATE İfadesi

Bu ifade bir veya daha fazla kaydı güncellemek için kullanılır. Kullanımı şu şekildedir;

[sql]UPDATE tablo_adı
SET sütun1=değer1, sütun2=değer2,…
WHERE sütun_adı=değer[/sql]

Dikkat ettiyseniz WHERE ifadesini de kullandık. Bu ifadeyi kullanmanın amacı hangi kaydımızı güncelleyeceğimizi belirlemektir. Eğer ki kullanmazsak tablomuzdaki bütün kayıtlar güncellenecektir.Hemen bir örnek yapalım. En son eklediğimiz Vin Diesel kaydının adres sütununu boş bırakmıştık, telefon numarasını da ’123456′ girmiştik hatırlarsanız. Şimdi o kaydımızı güncelleyerek hem adres bilgisini girelim hem de telefon numarasını değiştirelim.

[sql]UPDATE personel
SET Adres=’istanbul’, Tel=’666666666′
WHERE Ad=’Vin’ AND Soyad=’Diesel’[/sql]

Bu ifadeyi çalıştırdıktan sonra tablomuzu kontrol ettiğimizde kaydımıza adres bilgisinin eklendiğini ve telefon numarasının değiştiğini görürüz.

Önemli Uyarı: Yukarıda da söylediğim gibi eğer bu ifade de WHERE kullanmasaydık bütün kayıtlarımızın adresi istanbul, telefon numarası da 666666666 olacaktı.

DELETE İfadesi

Tablomuzdan kayıt silmek için bu ifadeyi kullanıyoruz. Kullanımı da şu şekilde;

[sql]DELETE FROM tablo_adı
WHERE sütun=değer[/sql]

Örnek olarakta az önce üzerinde düzenleme yaptığımız Vin Diesel kaydını silelim.

[sql]DELETE FROM personel
WHERE Ad=’Vin’ AND Soyad=’Diesel’[/sql]

Bu ifadeyi çalıştırdığımızda, kayıt silmek istediğimiz için phpMyAdmin “Aşağıdaki komutu çalıştırmak istediğinize emin misiniz?” şeklinde bir uyarı verebilir. Bu uyarıya tamam dedikten sonra kaydımız silinecektir.

Önemli Uyarı: UPDATE ifadesinde olduğu gibi DELETE ifadesinde de WHERE kullanmamız gerekir. Eğer kullanmazsak bütün kayıtlarımız silinecektir. Ama yapmak istediğimiz gerçekten tablodaki bütün kayıtları silmekse o zaman sadece

[sql]DELETE FROM personel[/sql]

ya da

[sql]DELETE * FROM personel[/sql]

ifadelerini kullanabiliriz. Ama unutmayın ki bu işlemin geri dönüşü yoktur!

Evet arkadaşlar bu yazımızın sonuna geldik.Peki SQL bu kadar mı? Tabii ki hayır. Yaklaşık 3′te birlik kısmını yazdık daha. Bu yüzden bende toplamda üç yazı hazırlamayı düşünüyorum. Sıradaki yazımız en geç bir hafta içinde hazır olur. Siz de bu arada bu yazımızdaki örnekleri sık sık tekrarlarsanız diğer yazıda sürekli geri dönüp “bu ifade ne işe yarıyordu ki?” diye bakmanıza gerek kalmaz. Yazıda anlamadığınız bir yer olursa ya da yanlış olduğunu düşündüğünüz bir yer varsa yorum yazmaktan çekinmeyin ki biz de sizlere yardımcı olabilelim, kendi hatalarımızı düzeltebilelim.

Bir sonraki yazımızda görüşmek üzere, hoşçakalın.

55 views

RenkliTeneke.Com blogundaki yeni yazılardan haberdar olmak için RSS Abonesi olabilirsiniz. İsterseniz Twitter'dan ya da FriendFeed'den takip edebilirsiniz. Ya da "Yeni yazılar e-mail adresime gelsin" diyorsanız e-mail abonesi olabilirsiniz.
Merhaba sevgili ziyaretçi. Şuanda renkliteneke.com bloguna " ataguL" tarafından " 17 Temmuz 2009" tarihinde yazılmış olan "SQL Nedir? – Komutları Nelerdir? {SQL Dersleri}" başlıklı bu yazıyı okuyorsun. Bu yazının başka bir yerde yayınlaması yasaktır. Her yazı ayrı bir özen içerisinde hazırlanıyor ve bu emeğin iki tık ile heba edilmesi pek hoşuma gitmez. Bu açıklama ise bilgilenmeniz için yazılmıştır.

6 Yorum »

  • Attack demiş ki:

    Gerçekten müthiş bir yazı olmuş. Paylaşım için teşekkürler..

  • Trend demiş ki:

    MySQL temel anlatımı için teşekkürler

  • miyako demiş ki:

    anlatım guzel ve anlasılır devamını kısa surede beklıyorum basarılar

  • Sinan Yorulmaz demiş ki:

    Son derece güzel bir anlatım. Benimde merak ettiğim bazı bilgileri giderdi. Teşekkürler.

  • Yasin ODUNKIRAN demiş ki:

    GERCEKDEN BILGILENDIRICI VE OGRETICI BIR ANLATIM KENDI ADIMA TESEKKUR EDERIM…

  • karakaya demiş ki:

    Sıfırdan başlayanlar için güzel bir kaynak olmuş teşekkürler

Yukarıdaki yazı hakkında kendi düşüncelerinizi yazın!

Lütfen yukarıdaki yazı hakkında düşüncelerini paylaş. Senin düşündüklerin bazen bu blogdaki yeni yayınlanacak yazının hangi konuda yazı yazılması gerektiğini belirliyor.

Yorum ekleye bilir yada yazı için geri bildirim gönderebilirsiniz. Bu yazı için yorumlarına abone ol: subscribe to these comments

 

Yorum içerisinde kullanabileceğiniz Html tagları :
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">

Yazıya yorum yazdığınızda yorumunuzun hemen yanında bir Gravatarınız yayınlanacaktır.
Hani benim Gravatarım? Gravatar'da neyin nesi?