Ön Hazırlık ve Gereksinimler
SQL sorgularını yazmaya ve test etmeye başlamadan önce, kodlarımızı çalıştırabileceğimiz bir veritabanı ortamına ihtiyacımız vardır. 2026 yılı itibarıyla yerel geliştirme ortamlarında Docker kullanımı veya hafif yapılı yerel veritabanı motorları tercih edilmektedir. Bu rehberdeki adımları takip edebilmek için aşağıdaki gereksinimleri karşılamanız önerilir:
- Veritabanı Sunucusu: Bilgisayarınızda kurulu bir PostgreSQL (Sürüm 15 veya üzeri) ya da MySQL (Sürüm 8.0 veya üzeri) sunucusu.
- Veritabanı İstemcisi (GUI): Sorguları yazıp çalıştırabileceğiniz DBeaver, pgAdmin, MySQL Workbench veya VS Code SQL araçları.
- Temel SQL Bilgisi: Tablo ve satır kavramlarına aşinalık.
Eğer sisteminizde kurulu bir veritabanı yoksa, tarayıcı tabanlı SQL deneme araçlarını (örneğin DB Fiddle veya SQL Fiddle) kullanarak da buradaki kod örneklerini anında test edebilirsiniz. Hazırlıklarınız tamamsa, ilk adımımız olan veritabanı şeması oluşturma işlemine geçebiliriz.
Adım 1: SQL Veritabanı ve Tablo Oluşturma Adım Adım
Veri filtreleme ve sorgulama işlemlerini gerçekleştirebilmek için öncelikle üzerinde çalışabileceğimiz anlamlı bir veri yapısına (tabloya) ihtiyacımız vardır. Bu adımda, bir e-ticaret sisteminin müşteri bilgilerini tutan kullanicilar tablosunu oluşturacağız ve içerisine test verileri ekleyeceğiz.
Aşağıdaki SQL kodu, öncelikle tablonun var olup olmadığını kontrol eder, ardından modern veri tiplerini kullanarak güvenli bir tablo yapısı tanımlar. Benzersiz kimlik (ID) için otomatik artan bir birincil anahtar (Primary Key) ve e-posta adresi için benzersizlik (Unique) kısıtlaması eklenmiştir.
-- Mevcut bir tablo varsa temizliyoruz
DROP TABLE IF EXISTS kullanicilar;
-- Yeni kullanicilar tablosunu oluşturuyoruz
CREATE TABLE kullanicilar (
id SERIAL PRIMARY KEY,
ad VARCHAR(50) NOT NULL,
soyad VARCHAR(50) NOT NULL,
eposta VARCHAR(100) UNIQUE NOT NULL,
yas INT NOT NULL,
sehir VARCHAR(50),
kayit_tarihi TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
aktif BOOLEAN DEFAULT TRUE
);
Yukarıdaki kod bloğu çalıştırıldığında, ilişkisel veritabanımızda kullanicilar adında boş bir tablo oluşturulur. SERIAL veri tipi (MySQL için AUTO_INCREMENT), her yeni kayıtta ID değerinin otomatik olarak birer birer artmasını sağlar. TIMESTAMP ise kullanıcının kayıt anındaki tarih ve saat bilgisini otomatik olarak kaydeder.
Şimdi bu tablonun içerisini sorgulayabileceğimiz örnek verilerle dolduralım. Gerçekçi senaryoları test edebilmek için farklı yaş, şehir ve aktiflik durumlarına sahip kayıtlar ekleyeceğiz.
-- Tabloya test verileri ekleme işlemi
INSERT INTO kullanicilar (ad, soyad, eposta, yas, sehir, aktif) VALUES
('Ahmet', 'Yılmaz', 'ahmet.yilmaz@example.com', 28, 'İstanbul', true),
('Mehmet', 'Kaya', 'mehmet.kaya@example.com', 34, 'Ankara', true),
('Ayşe', 'Demir', 'ayse.demir@example.com', 22, 'İzmir', true),
('Fatma', 'Şahin', 'fatma.sahin@example.com', 45, 'İstanbul', false),
('Mustafa', 'Öztürk', 'mustafa.ozturk@example.com', 19, 'Bursa', true),
('Zeynep', 'Çelik', 'zeynep.celik@example.com', 31, 'Ankara', false);
Bu INSERT sorgusu ile veritabanımıza 6 adet farklı kullanıcı kaydı eklemiş olduk. Artık elimizde sorgulayabileceğimiz, filtreleyebileceğimiz gerçekçi bir veri kümesi bulunmaktadır.
Adım 2: SQL ile Temel Veri Seçme (SELECT) İşlemi Nasıl Yapılır?
Veritabanından veri çekmenin en temel yolu SELECT ifadesini kullanmaktır. Bir tablodaki tüm sütunları ve tüm satırları getirmek için genellikle yıldız (*) karakteri kullanılır. Ancak üretim ortamlarında performans açısından sadece ihtiyaç duyulan sütunların seçilmesi önerilir.
Aşağıdaki örnek kodda, tablomuzdaki tüm verileri listeleyen temel sorguyu ve ardından sadece belirli sütunları hedefleyen optimize edilmiş sorguyu görebilirsiniz.
-- Tablodaki tüm verileri ve tüm sütunları getiren sorgu
SELECT * FROM kullanicilar;
Yukarıdaki sorgu, tablodaki tüm satırları ve tüm sütunları (id, ad, soyad, eposta, yas, sehir, kayit_tarihi, aktif) herhangi bir filtreleme yapmaksızın döndürür. Küçük tablolarda bu işlem sorun yaratmazken, milyonlarca satır içeren tablolarda ciddi performans kayıplarına ve ağ trafiğine yol açar. Bu nedenle aşağıdaki gibi spesifik seçimler yapmalıyız:
-- Sadece ad, soyad ve e-posta bilgilerini getiren optimize sorgu
SELECT ad, soyad, eposta FROM kullanicilar;
Bu sorgu çalıştırıldığında, veritabanı motoru diskten sadece belirtilen üç sütuna ait verileri okur ve istemciye gönderir. Bu işlem bellek (RAM) kullanımını azaltır ve sorgu yanıt süresini (latency) minimize eder.
Adım 3: SQL WHERE (Veri Filtreleme) Koşulu Nasıl Kullanılır?
Geliştirdiğimiz uygulamalarda genellikle tablodaki tüm verilere değil, belirli kriterleri karşılayan verilere ihtiyaç duyarız. SQL'de "Sql & Ver" yani veri süzme işlemini gerçekleştiren anahtar kelime WHERE ifadesidir. WHERE ifadesi, belirtilen mantıksal koşulu sağlayan (koşul sonucu TRUE dönen) satırları filtreler.
Aşağıdaki örnek kodda, yaşı 25'ten büyük olan ve aktif durumu true (etkin) olan kullanıcıları nasıl filtreleyeceğimizi göreceğiz. Bu işlem için mantıksal AND (VE) operatörünü kullanacağız.
-- Yaşı 25'ten büyük ve hesabı aktif olan kullanıcıları filtreleme
SELECT ad, soyad, yas, aktif
FROM kullanicilar
WHERE yas > 25 AND aktif = true;
Bu sorgu çalıştırıldığında, veritabanı motoru tablodaki her bir satırı inceler. Sadece yas değeri 25'ten büyük olan VE aktif değeri true olan satırları sonuç kümesine dahil eder. Bizim veri kümemizde bu koşulu sağlayan kayıtlar Ahmet Yılmaz (28) ve Mehmet Kaya (34) olacaktır. Fatma Şahin'in yaşı 45 olmasına rağmen aktif değeri false olduğu için bu listede yer almaz.
Filtreleme işlemlerinde kullanabileceğimiz temel karşılaştırma operatörleri şunlardır:
=: Eşittirveya!=: Eşit Değildir: Büyüktür=: Büyük veya Eşittir
Şimdi de belirli bir şehirde yaşayan veya belirli bir yaş sınırının altında olan kullanıcıları listelemek için OR (VEYA) operatörünü kullanalım.
-- Şehri 'Ankara' olan VEYA yaşı 20'den küçük olan kullanıcıları listeleme
SELECT ad, soyad, sehir, yas
FROM kullanicilar
WHERE sehir = 'Ankara' OR yas < 20;
Bu sorgu, şehir alanı 'Ankara' olan kayıtları (Mehmet Kaya, Zeynep Çelik) ve yaşı 20'den küçük olan kayıtları (Mustafa Öztürk) bir araya getirerek döndürür. Koşullardan en az birinin doğru olması satırın listelenmesi için yeterlidir.
Adım 4: SQL ve Veri Güncelleme (UPDATE) ile Silme (DELETE) İşlemleri
Veri filtreleme sadece veri okuma (SELECT) işlemlerinde değil, veri güncelleme (UPDATE) ve veri silme (DELETE) işlemlerinde de hayati bir öneme sahiptir. Eğer bir güncelleme veya silme sorgusunda WHERE koşulunu belirtmezseniz, tablodaki tüm veriler etkilenir ve bu durum geri dönülemez veri kayıplarına yol açabilir.
Kritik Güvenlik Uyarısı: Üretim (production) ortamlarındaUPDATEveyaDELETEsorguları yazarken her zaman önce birSELECTsorgusu yazarak hangi satırların etkileneceğini simüle edin. YanlışlıklaWHEREifadesini unutmak tüm veritabanını bozabilir.
Aşağıdaki örnek kodda, sadece belirli bir kullanıcının e-posta adresini güvenli bir şekilde nasıl güncelleyeceğimizi ve pasif durumdaki bir kullanıcıyı nasıl sileceğimizi göreceğiz.
-- Belirli bir ID'ye sahip kullanıcının e-posta adresini güncelleme
UPDATE kullanicilar
SET eposta = 'yeni.ahmet@example.com'
WHERE id = 1;
Yukarıdaki sorgu sadece id = 1 olan satırı (Ahmet Yılmaz) hedef alır ve yalnızca o satırın e-posta adresini günceller. Diğer hiçbir satır bu işlemden etkilenmez.
Şimdi de sistemde aktif olmayan ve belirli bir şehirde yaşayan kullanıcıları silme işlemini gerçekleştirelim.
-- İstanbul'da yaşayan ve aktif olmayan kullanıcıları silme
DELETE FROM kullanicilar
WHERE sehir = 'İstanbul' AND aktif = false;
Bu sorgu çalıştırıldığında, tablomuzda yer alan ve bu iki koşulu aynı anda sağlayan Fatma Şahin adlı kullanıcının kaydı kalıcı olarak silinecektir. Silme işlemi öncesinde koşulların doğruluğundan emin olmak veritabanı bütünlüğü açısından şarttır.
Adım 5: Gelişmiş Veri Filtreleme ve Metin Arama (LIKE, ILIKE, Wildcards)
Bazen tam bir eşleşme yerine, metinsel alanların içerisinde belirli bir kelime veya harf grubunu aramak isteyebiliriz. Örneğin, e-posta adresi "example.com" ile bitenleri bulmak veya adı "A" harfi ile başlayanları listelemek gibi. Bu tür durumlarda SQL'de LIKE operatörü ve joker karakterler (wildcards) kullanılır.
SQL standartlarında kullanılan iki temel joker karakter vardır:
%: Sıfır veya daha fazla karakterin yerini tutar._: Sadece tek bir karakterin yerini tutar.
Aşağıdaki örnek kodda, adı "A" harfi ile başlayan ve e-posta adresi içerisinde "kaya" ifadesi geçen kullanıcıları nasıl filtreleyeceğimizi göreceğiz.
-- Adı 'A' harfi ile başlayan kullanıcıları listeleme
SELECT ad, soyad, eposta
FROM kullanicilar
WHERE ad LIKE 'A%';


Yorumlar (0)
Yorum Yaz