SQL Serisi – 3: Gelişmiş Veri Filtreleme; LIKE, IN ve BETWEEN Operatörleri ile Esnek Sorgulama
İlişkisel veritabanı yönetim sistemlerinde (RDBMS) verileri = veya != gibi tam eşleşme operatörleriyle filtrelemek çoğu zaman yeterli olmaz. Gerçek dünya senaryolarında; kullanıcıların arama kutularına yazdığı kısmi metinleri yakalamak, belirli bir sayısal veya kronolojik aralığı süzmek ya da dinamik bir liste içerisindeki değerleri tek seferde sorgulamak gerekir.
Serimizin ilk iki makalesinde CRUD döngüsünü, WHERE tümcesini ve mantıksal operatörleri incelemiştik. Bu yazıda ise veri analizinde esnekliği artıran, sorgu yazımını kısaltan ve optimizasyon sağlayan üç kritik operatörü ele alacağız: LIKE, IN ve BETWEEN.
1. Karakter Kalıbı Eşleştirme: LIKE Operatörü
LIKE operatörü, metinsel (String) veriler içerisinde tam bir eşitlik aramak yerine, belirli bir karakter kalıbını (Pattern) taramak için kullanılır. Bu operatörle birlikte arama esnekliğini sağlayan iki temel joker karakter (wildcard) kullanılır:
%(Yüzde İşareti): Sıfır veya daha fazla karakterin yerini tutar._(Alt Çizgi): Sadece tek bir karakterin yerini tutar.
A) İki Taraflı Joker (%Arama%)
Aranan kelimenin metnin neresinde geçtiğini önemsemeden, içerisinde barınması durumunda kaydı getirmek için kullanılır.
-- Ürün adı içerisinde 'Akıllı' kelimesi geçen tüm kayıtları listeler
SELECT UrunID, UrunAdi, Fiyat
FROM Urunler
WHERE UrunAdi LIKE '%Akıllı%';
B) Belirli Bir Karakter ile Başlayan (Arama%) veya Biten (%Arama)
Metnin sadece başlangıç köklerine ya da sadece son harflerine göre filtreleme yapar.
-- Telefon numarası '0532' ile başlayan kullanıcıları filtreler
SELECT KullaniciID, Ad, Soyad, Telefon
FROM Kullanicilar
WHERE Telefon LIKE '0532%';
C) Tek Karakter Sabitleme (_)
Metnin uzunluğunu ve belirli basamaklarındaki karakterleri kesinleştirmek istediğimiz durumlarda harika bir çözümdür.
-- İlk karakteri ne olursa olsun ikinci ve üçüncü karakteri 'AR' olan
-- ve devamı önemli olmayan ürün kodlarını listeler (Örn: MARS, PARDUS)
SELECT UrunID, UrunKodu
FROM Urunler
WHERE UrunKodu LIKE '_AR%';
2. Küme İçinde Filtreleme: IN Operatörü
Birden fazla OR (Veya) mantıksal operatörü kullanarak yazacağımız uzun, karmaşık ve okunabilirliği düşük sorguları optimize etmek için IN operatörünü kullanırız. IN, belirtilen bir kolonun değerinin, parantez içinde verilen kümedeki elemanlardan herhangi biriyle eşleşip eşleşmediğini kontrol eder.
Uygulama Örnek Senaryosu:
E-ticaret sitemizde sadece ‘Elektronik’, ‘Giyim’ ve ‘Kitap’ kategorisindeki ürünleri izole etmek istediğimizde OR yerine çok daha temiz ve performanslı bir sentaks sunar:
-- Belirtilen kategorilere ait ürünleri filtreler
SELECT UrunID, UrunAdi, Kategori, Fiyat
FROM Urunler
WHERE Kategori IN ('Elektronik', 'Giyim', 'Kitap');
Not: Eğer bu liste dışındaki ürünleri listelemek isterseniz, operatörün başına
NOTkelimesini ekleyerekNOT INşeklinde kullanabilirsiniz.
3. Aralık Belirleme: BETWEEN Operatörü
Belirli iki değer arasındaki (başlangıç ve bitiş değerleri dahil olmak üzere) kayıtları listelemek için BETWEEN operatörü kullanılır. Sayısal (Numeric) verilerin yanı sıra kronolojik (DateTime) sorgulamalarda da sıklıkla tercih edilir.
A) Sayısal Aralık Sorgulama
-- Fiyatı 1000 TL ile 5000 TL arasında (1000 ve 5000 dahil) olan ürünleri getirir
SELECT UrunID, UrunAdi, Fiyat
FROM Urunler
WHERE Fiyat BETWEEN 1000 AND 5000;
B) Tarihsel Aralık Sorgulama
Veritabanlarında tarih formatı genellikle YYYY-MM-DD (Yıl-Ay-Gün) yapısındadır. Belirli bir zaman dilimindeki siparişleri çekmek için sorgu şu şekilde kurgulanır:
-- 2026 yılının Ocak ayı içerisinde verilen tüm siparişleri listeler
SELECT SiparisID, MusteriID, SiparisTarihi, ToplamTutar
FROM Siparisler
WHERE SiparisTarihi BETWEEN '2026-01-01' AND '2026-01-31';
Karmaşık Senaryo: Operatörlerin Kombinasyonu
Gerçek projelerde ve iş analitiği süreçlerinde bu operatörler AND / OR mantığıyla birbirine bağlanarak anahtar sonuç kümeleri (Result Set) elde edilir.
Senaryo: Kategori bilgisi ‘Elektronik’ veya ‘Beyaz Eşya’ olan, fiyatı 5.000 TL ile 20.000 TL arasında yer alan ve ürün adının içinde ‘Siyah’ kelimesi geçen ürünleri, fiyata göre en yüksekten en düşüğe sıralayalım:
SELECT UrunID, UrunAdi, Kategori, Fiyat
FROM Urunler
WHERE Kategori IN ('Elektronik', 'Beyaz Eşya')
AND Fiyat BETWEEN 5000 AND 20000
AND UrunAdi LIKE '%Siyah%'
ORDER BY Fiyat DESC;
Özet
LIKE, IN ve BETWEEN operatörleri, SQL sorgularınızın esnekliğini artırırken aynı zamanda kodun okunabilirliğini (Readability) en üst seviyeye çıkarır. Büyük veri kütleleri üzerinde çalışırken doğru indeksleme stratejileriyle birleştiğinde bu operatörler, veri tabanı sorgu optimizasyonlarının vazgeçilmez yapı taşlarıdır.
Serimizin bir sonraki teknik makalesinde, verileri satır bazlı filtrelemekten çıkıp grup bazlı özetlemeye geçeceğiz ve SQL’in gerçek analitik gücünü temsil eden Toplama Fonksiyonları (COUNT, SUM, AVG) ile GROUP BY / HAVING mimarisini inceleyeceğiz.