Tem.20

PHP ve MySQLi Dersleri 6: SQL Sorguları ve Kullanım Örnekleri

SQL’de verdiğimiz direktiflere Sorgu, diğer bir ismi ile Query denmektedir. Sorgular basit birer cümleden ibarettir. Cümle içinde bazı yazım kurallarına göre veritabanından hangi verilerin nasıl bir şekilde getirileceği belirtilmektedir. Şimdi işimize en çok yarayacak olan sorgu örneklerini inceleyelim.

Sorgu örneklerini öğrenebilmeniz için elinizde bir veritabanının olması gerekmektedir. Bu veritabanı üzerinde sorgularınızı çalıştırarak öğrenebilirsiniz. Sorgu örneklerini phpMyAdmin paneli üzerinden de yapabilirsiniz. Fakat veritabanı içeriği boşsa hiçbir sorgu size sonuç getirmez. Bu yüzden ilk örneklerimizi yine http://www.tutorialspoint.com/execute_sql_online.php adresinden test ederek yapacağız.

İlk olarak test için verilen SQL sorgusunu inceleyelim…

BEGIN TRANSACTION;
/* Create a table called NAMES */
CREATE TABLE NAMES(Id integer PRIMARY KEY, Name text);
/* Create few records in this table */
INSERT INTO NAMES VALUES(1,'Tom');
INSERT INTO NAMES VALUES(2,'Lucy');
INSERT INTO NAMES VALUES(3,'Frank');
INSERT INTO NAMES VALUES(4,'Jane');
INSERT INTO NAMES VALUES(5,'Robert');
COMMIT;
/* Display all the records from the table */
SELECT * FROM NAMES;

BEGIN TRANSACTION; ve COMMIT; kodları arasında veritabanı tablosunu oluşturan ve tablo içinde de 5 adet kayıt oluşturan sorgumuz var. İlk olarak CREATE TABLE NAMES () ile veritabanı (daha önceleri oluşturulmuş olan main.sql üzerinde) üzerinde bir tablo oluşturuluyor. Tablomuzun ismi NAMES. Parametre değeri olarak da sütun değerleri ve bu değerlere ait veri tipleri alınıyor. ID sütunu sürekli artan değer içereceği ve bir kimlik tanımlaması yapacağı için PRIMARY KEY olarak tanımlanıyor. Bu değer, biz her kayıt girdiğimizde otomatik olarak kendi kendine 1 artacaktır. İkinci parametre ise Name adında bir sütundur. Kişilerin isimlerini saklayacak ve Text veri türündedir.

INSERT INTO ile de NAMES tablosuna VALUES ile değerler gönderiliyor. Sırası ile ilk değer ID için, ikinci değer de Name içindir. ID değerinin sayısal bir değer olduğuna dikkat delim. Bu nedenle ‘ ’ işaretleri içinde yazdırılmıyor. İkinci değer de Metin olduğu için mutlaka ‘ ’ işaretleri içinde yazılmalıdır.

En son sorguda ise SELECT ile NAMES tablosu verileri çekiliyor…

Sorgularımızı yazarken SELECT * FROM NAMES; satırını silip, incelediğimiz kodu yazarak, sayfanın üst kısmında yer alan Execute butonunu tıklamayı unutmayın!

SELECT: Tablodaki Kayıtları Sıralamak

Veritabanı içindeki belirli bir tablodan, bütün sütunları veya parametre olarak belirtilen sütunların değerlerini getirir.

Tablodaki bir sütun değerini çekmek için o sütunun ismi belirtilmelidir. SELECT ile seçme yapılacağı belirtilir, arada bir boşluk bırakılarak hangi sütunun çekileceği, yine bir boşluk bırakılıp FROM tanımı ile hangi tablodan çekileceği belirtilir. Satır sonları yine ; notasyonu ile kapatılmalıdır.

SELECT Name FROM NAMES;

Bu sorgu bize sadece isimleri getirir.

Tom
Lucy
Frank
Jane
Robert

Eğer birden fazla sütun bize gerekiyorsa, bu sefer istediğimiz her sütunun ismini aralarında virgül notasyonu ile belirtmemiz gerekiyor.

SELECT Id, Name FROM NAMES;

1|Tom
2|Lucy
3|Frank
4|Jane
5|Robert

Eğer elimizde çok fazla sütun varsa, bunların hepsini de çekmek istiyorsak joker karakter olarak * tanımlamasıyla bütün sütunları hedefleyebiliriz.

SELECT * FROM NAMES;

Bu sorgu, yukarıdaki sonuç ile aynısını vermektedir (Zaten iki tane sütunumuz var, Id ve Names).

ORDER BY – ASC/DESC: Artan ve Azalan Sıralamak

Bazı hallerde büyükten küçüğe veya harf sıralamasına göre seçim yapmak isteyebilirsiniz. Varsayılan olarak ilk girilen kayıttan, son girilen kayıta göre sıralama yapılır. Ancak bu şekilde değil de son kayıt başta olsun da diyebilirsiniz. Veya isme göre de sıralama yapabilirsiniz.

Sıralamada ASC ve DESC parametreleri de eklenmelidir. Varsayılan olarak ASC sıralaması ile küçükten büyüğe sıralama yapılır.

İlk olarak isme göre, yani Name sütununa baştan sona sıralama yapalım.

SELECT Id,Name FROM NAMES ORDER BY Name;

3|Frank
4|Jane
2|Lucy
5|Robert
1|Tom

Bu sıralamada gördüğünüz gibi F (Frank) harfi alfabede daha ilk sırada olduğu için en başa çekildi. T (Tom) harfi de en sonda olduğu için en sona atıldı. Aralardaki değerler de bu sıralamaya göre düzenlenecektir. Ek olarak, bu sıralamada varsayılan değer ASC’dir. Yani şu şekilde yazsak yine aynı sonucu alırız:

SELECT Id,Name FROM NAMES ORDER BY Name ASC;

Z’den A’ya göre sıralamak için de ASC yerine DESC kullanırız.

LIMIT: Belirli Bir Sayıdaki Verileri Sıralamak

Eğer elinizde çok fazla sayıda veri varsa, bunların hepsini bir anda çekmeniz imkansız bir hal alabilir. Mesela 1 milyon kişiye ait bir veri var. Böyle durumlarda hepsini birden çekmeye çalışmak akılsızca bir davranış olur. Bunun yerine o veriler parça parça çekilip gösterilir.

Şu anda veritabanımızda 5 adet isim kaydı var. Bize son 3 tanesi gerekiyorsa şu şekilde bir sorgu kullanabiliriz.

SELECT Id,Name FROM NAMES ORDER BY Id DESC LIMIT 3;

5|Robert
4|Jane
3|Frank

WHERE – AND/OR: Belirli Koşullara Göre Verileri Sıralamak

Az önce bahsetmiş olduğumuz limitli seçme işleminde daha gelişmiş işlemler yapabiliriz. Yine 1milyon verimiz varsa bu veriyi parça parça çekmek gerekir. Mesela 0-100 arası, sonra 100-200 arası gibi. Böyle böyle tüm verileri gösterilebilir. Sorguyu çalıştırmak için de bir ön yüz bileşeninde ileri geri butonları ile bu aralık değiştirilebilir. Tahmin edeceğiniz üzere bu tür karşılaştırma işlemlerinde karşılaştırma operatörleri, çoklu karşılaştırma için de mantıksal operatörler kullanılır.

SQL’de mantıksal operatörler AND ve OR şeklinde tanımlanır.

Elimizdeki 5 adet örnekle devam edelim. Id değeri 1’den büyük ve 4’ten küçük olan değerleri gösterelim. Yani 2 ve 3 değerleri gelmeli.

SELECT * FROM NAMES WHERE Id<4 AND Id>1;

2|Lucy
3|Frank
Şimdi de Id değeri 4 olan değeri çekelim.
SELECT * FROM NAMES WHERE Id=4;
4|Jane

LIKE ve LIKE/NOT: Tabloda Hassas Arama Yapmak ve Sonuçları Sıralamak

WHERE sorgusu ile filtre yaparak sıralama yapabiliyoruz. Ancak Name sütununda ismi “A” ile başlayanları veya sonu “a” ile biten de olabilir. Veya içinde belirli bir kelime-harf grubu göstermek istersek de yine istediğimiz arama desenini belirtip sorgulayabiliriz.

LIKE sorgusu, benzer anlamına gelir ve WHERE ile kullanılır.

İlk olarak Name sütununda “R” ile başlayan verileri sıralayalım.

SELECT * FROM NAMES WHERE Name LIKE 'R%';

5|Robert

Sorgumuzda LIKE’tan sonra ‘ ‘ içinde desen belirtilir. % tanımı, araları dolduracak olan joker karakterleri belirtir.

Sonu “m” ile bitenleri sıralayalım…

SELECT * FROM NAMES WHERE Name LIKE '%m';

1|Tom

Bu sefer % joker karakterleri başa alındı.

İçinde “a” harfi geçenleri sıralayalım…

SELECT * FROM NAMES WHERE Name LIKE '%a%';

3|Frank
4|Jane

Bu sefer de joker karakterleri başa ve sona aldık.

Bir de, tersi durumu için alalım. Yani içinde “a” geçmeyenleri getirelim.

SELECT * FROM NAMES WHERE Name NOT LIKE '%a%';

Tersi koşulunu alabilmek için NOT operatörünü kullandık.

1|Tom
2|Lucy
5|Robert

INSERT INTO: Tabloya Yeni Kayıtlar Eklemek

Var olan sorgu şablonumuzda gördük ama baştan değinmekte fayda var.

Veritabanına yeni bir kayıt eklemek için öncelikle hedef tablo belirlenmeli. Sonrasında hangi sütunlara hangi değerlerin ekleneceği sırası ile eklenerek sorgu çalıştırılmalıdır.
İki türlü veri ekleme yapılır. Eğer bütün sütunlara değer eklenecekse, değerler birbiri peşi sıra eklenerek sorgu çalıştırılabilir. Eğer belirli sütunlara değer eklenecekse, bu sefer sütun isimleri de belirtilmelidir.

Var olan tablo oluşturma sorgumuzu baştan değiştirelim.

CREATE TABLE KISILER (ID INTEGER AUTO_INCREMENT, ISIM TEXT, SOYISIM TEXT, YAS INTEGER);

Bu sorgumuza göre KISILER ismi ile bir tablo oluşturulacak. Tablomuz şu yapıdadır:

ID değeri her kayıtta otomatik olarak kendisi artacaktır. Bu ifadeyi AUTO_INCREMENT ile verdik. SOYISIM ve ISIM sütunları TEXT, YAS ise INTEGER veri tipindedir.

Sütunları belirtmeden yeni kayıt eklemek istersek şöyle uygulayabiliriz.

INSERT INTO KISILER VALUES('Uğur','GELİŞKEN',33);

Bu şekilde ISIM, SOYISIM ve YAS sütunlarına değerler aktırılacaktır. Dikkat edin, ilk sütun ID’ydi. Fakat otomatik değer aldığı için es geçilecek ve sonraki sütunlar hedeflenecektir.

Eğer sadece isim ve yaş girmek istersek:

INSERT INTO KISILER(ISIM,YAS) VALUES('Uğur',33);

Gördüğünüz gibi KISILER, yani tablo ismi yanında () operatörleri açılarak içine sütunlar girilmiştir. Arada SOYISIM sütununu atladık.

Sorgularımızı çalıştırıp SELECT ile seçim yaparsak şöyle çıktımız gelecektir.

1|Uğur|GELİŞKEN|33
2|Uğur||33

UPDATE: Veri Güncellemek

Mesela bir üyelik sisteminiz var. Bu veritabanında kullanıcı istediği zaman bilgilerini değiştirebilmelidir. Veritabanında bilgi değişikliği için de UPDATE sorgusu kullanılır. Ancak hangi bilginin (daha doğrusu satır olarak tanımlanan kayıtın) güncelleneceğini de WHERE ile belirtmek gerekiyor.

Sorgumuzda 2 adet kayıt vardı. 2. kayıtta SOYISIM kısmı boştu. Kullanıcıya bir soyisim tanımlatalım.

UPDATE KISILER SET SOYISIM='DEMİRVURAN' WHERE ID=5;

Sorgumuzu inceleyelim… UPDATE ile güncelleme yapılacağı ve sonrasında hangi tabloda olacağı belirlendi. SET tanımı ile veri atanacağı, SOYISIM ile de hangi sütuna atanacağı belirtiliyor.
Ardından = atama operatörü ile değerimiz ekleniyor. Değer bir metin olduğu için tırnak içerisinde yazdırılıyor. Verinin hangi satırda olduğunu belirtmek için de ID değeri 5 olması gerektiği koşulunu ekliyoruz.

Önceki hali:

5|Uğur||33

Sonraki hali:

5|Uğur|DEMİRVURAN|33

Güncellenecek olan verinin önceki kaydının boş olması gerekmez. İçinde bir veri varsa, eskisi silinip yenisi eklenir Ancak eski ile yeni verinin aynı türde olmasına dikkat edin. Ek olarak yine ID sütununda otomatik tanımlanan tekil değerleri de güncelleyemezsiniz!

DELETE: Belirli Koşulu Sağlayan Kaydı Silmek

Veritabanından belirli koşulu sağlayan veriyi silmek için kullanılır.

DELETE FROM KISILER WHERE ID=1;

Bu sorguya göre ID değeri 1 olan kayıt silinir.

Eğer bütün tabloyu silmek isterseniz:

DELETE * FROM KISILER;

DELETE – AND/OR: Belirli Koşulları Sağlayan Kayıtları Silmek

Birden fazla koşula bağlı olarak verileri silmek için AND ve OR mantıksal operatörlerini kullanabilirsiniz.

DELETE FROM KISILER WHERE ISIM=’Uğur’ AND SOYISIM=’GELİŞKEN’;

Bu sorguya göre ISIM değeri Uğur, SOYISIM değeri de GELİŞKEN olan kayıtlar silinecektir.

DELETE – LIKE: Benzer Kayıtları Silmek

Bir değer aranır ve o değere uyan kayıtlar silinir. Mesela yaşı 30’dan büyük olanların verilerini silelim…

DELETE FROM KISILER WHERE ISIM YAS=’3%’;
İçeriği paylaş:
  • facebook
  • twitter