Veritabanları genellikle binlerce, hatta milyonlarca satırlık devasa veri kümelerini barındırır. Bu veri okyanusunun içinden sadece ihtiyacımız olan spesifik bilgileri çekmek, hem veritabanı performansını yüksek tutmak hem de doğru analizler yapabilmek için hayati bir öneme sahiptir. SQL’de (Yapılandırılmış Sorgu Dili) tüm tabloları olduğu gibi çekmek yerine, verileri belirli bir süzgeçten geçirmek için WHERE tümcesi ve metin tabanlı aramalarda gücünü gösteren LIKE operatörü kullanılır.
SQL TEMEL İŞLEMLER EĞİTİM VİDEOMUZ İÇİN TIKLAYIN
Bu rehberimizde, WHERE ve LIKE komutlarının nasıl çalıştığını, hangi operatörlerle birlikte kullanıldığını ve sorgularınızı nasıl optimize edebileceğinizi (SARGable) tüm detaylarıyla inceleyeceğiz.
SQL WHERE Nedir?
WHERE, veritabanından çekilecek veya üzerinde işlem yapılacak verileri belirli bir koşula göre filtrelemek için kullanılan SQL tümcesidir. Büyük veritabanlarında çalışırken sadece ihtiyacınız olan satırları hedeflemenizi sağlar ve genellikle SELECT ifadesi ile birlikte anılsa da, UPDATE ve DELETE gibi veri işleme (DML) komutlarında da zorunlu bir güvenlik ve filtreleme adımı olarak kullanılır.
WHERE tümcesi temelde bir filtre (süzgeç) görevi görür. Sistem, tablodaki her bir satırı tek tek değerlendirir ve yazdığınız koşulu test eder. Bu testin sonucunda SQL mantığına göre üç farklı durum ortaya çıkabilir:
- Eğer koşul DOĞRU (TRUE) ise, ilgili satır sorgu sonuçlarına dahil edilir.
- Eğer koşul YANLIŞ (FALSE) ise, ilgili satır sonuçlardan hariç tutulur.
- Eğer sütunda boş (eksik) veri varsa test NULL (Bilinmeyen) sonucu verir ve bu satır da sorgudan dışlanır,.
WHERE komutunun bir diğer önemli özelliği de çalışma sırasıdır; WHERE tümcesi verileri her zaman GROUP BY gibi gruplama veya SUM, AVG gibi toplama işlemlerinden önce filtreler.
WHERE ile Kullanılan Temel Operatörler
WHERE komutunun arkasına yazılan koşullar, ihtiyaca göre çeşitli matematiksel ve mantıksal operatörler ile zenginleştirilebilir:
1. Karşılaştırma Operatörleri: İki ifadeyi matematiksel veya alfabetik olarak kıyaslar.
- = (Eşittir): Birebir eşleşmeleri bulur.
WHERE Sehir = 'İstanbul' - <> veya != (Eşit Değildir): İstenen değer dışındakileri getirir.
- <, >, <=, >= (Büyüktür, Küçüktür vb.): Rakam ve tarih aralıklarını belirlemek için idealdir.
WHERE Maas >= 5000
2. Mantıksal Operatörler (AND, OR, NOT): Birden fazla koşulu aynı anda değerlendirmek için kullanılır.
- AND: Belirtilen tüm koşulların aynı anda doğru olması zorunludur.
WHERE Sehir = 'Ankara' AND Maas > 4000 - OR: Belirtilen koşullardan herhangi birinin doğru olması satırı çekmek için yeterlidir.
WHERE Departman = 'IT' OR Departman = 'IK' - NOT: Belirtilen koşulun tersini alır.
WHERE NOT Sehir = 'İzmir'
3. Aralık Testi (BETWEEN): Belirli bir alt ve üst sınır arasında kalan değerleri filtreler. Genellikle tarih ve fiyat filtrelemelerinde kullanılır.
- Örnek:
WHERE SiparisTarihi BETWEEN '2024-01-01' AND '2024-12-31'
4. Küme Üyeliği Testi (IN): Belirttiğiniz bir liste içindeki değerlerden herhangi biriyle eşleşen satırları getirir. Birçok OR koşulunu yan yana yazmaktan çok daha okunaklı ve hızlıdır.
- Örnek:
WHERE Ulke IN ('Türkiye', 'Almanya', 'İtalya')
5. Boş Veri Kontrolü (IS NULL / IS NOT NULL): Eğer bir hücreye veri girilmemişse, SQL o hücreyi NULL olarak işaretler. NULL değerini bulmak için WHERE Sütun = NULL yazamazsınız; çünkü bilinmeyen bir değer eşitlik testi ile bulunamaz ve her zaman NULL döner. Doğru kullanım şu şekildedir,:
- Eksik verileri getirmek için:
WHERE Eposta IS NULL - Dolu verileri getirmek için:
WHERE Eposta IS NOT NULL
SQL LIKE Operatörü ve Wildcard (Joker) Karakterler
Bir e-ticaret siteniz olduğunu düşünün. Kullanıcılarınız “Telefon” kelimesini aratıyor ancak bazıları “Akıllı Telefon”, bazıları ise “Telefon Kılıfı” yazıyor. Eşittir (=) operatörü sadece birebir “Telefon” yazan kayıtları getireceği için burada işinize yaramaz. İşte metin (string) tabanlı verilerde, belirli bir deseni (pattern) eşleştirmek ve arama yapmak için LIKE operatörü kullanılır,.
LIKE komutu tek başına bir anlam ifade etmez; gücünü “Wildcard” yani joker karakterlerden alır. SQL’de yaygın olarak kullanılan iki joker karakter vardır:
- % (Yüzde İşareti): Sıfır, bir veya birden fazla karakteri temsil eder,.
- _ (Alt Çizgi): Sadece ve sadece tek bir karakteri temsil eder,.
LIKE Kullanım Örnekleri
Yukarıdaki joker karakterleri metnin başında, sonunda veya ortasında dilediğiniz gibi kombinleyebilirsiniz,.
WHERE UrunAdi LIKE 'Apple%': Apple ile başlayan tüm ürünleri getirir (Apple, Apple iPhone, Apple Watch vb.).WHERE UrunAdi LIKE '%Kılıf': Kılıf kelimesi ile biten tüm ürünleri getirir.WHERE UrunAdi LIKE '%Tablet%': Cümlenin neresinde geçerse geçsin, içinde “Tablet” kelimesi geçen her şeyi getirir.WHERE UrunAdi LIKE 'iP_ad': İlk iki harfi “iP”, son iki harfi “ad” olan ve ortasında yalnızca tek bir karakter (örneğin iPad) olan veriyi getirir.
Bazı özel durumlarda yüzde veya alt çizgi işaretini metin içinde bir karaktermiş gibi aramanız gerekebilir (Örneğin “%20 İndirim”). Böyle bir durumda sistemin joker karakter ile normal karakteri ayırt etmesi için ESCAPE (kaçış) tümcesi kullanılır,. Ayrıca aradığınız desene uymayan metinleri filtrelemek isterseniz NOT LIKE operatörünü rahatlıkla kullanabilirsiniz.
Filtreleme İşlemlerinde Performans ve SARGable Optimizasyonu
SQL sorgularında WHERE ve LIKE komutlarını yazmak oldukça basittir ancak veritabanı büyüdükçe bu sorguların performansı hayati bir sorun haline gelir. Veritabanı optimizasyonu için en önemli tekniklerden biri sorguları SARGable (Search Argument Able) olarak yazmaktır. Bir sorgu eğer SARGable ise, veritabanı motoru tabloda baştan sona tarama yapmak yerine, indeksleri (fihristleri) kullanarak veriyi saniyeler içinde bulabilir.
SQL sorgularınızı hızlandırmak (SARGable yapmak) için şu ipuçlarına dikkat etmelisiniz:
- Filtrelemeyi Erken Yapın: İhtiyacınız olan verileri daraltmak için filtreleme koşullarını (WHERE) her zaman sorgunun en başında ekleyerek işlenecek veri boyutunu hızlıca küçültün.
- WHERE İçinde Fonksiyon Kullanmaktan Kaçının: WHERE tümcesinde sütun adının üzerine bir fonksiyon uygulamak veritabanının indeksleri kullanmasını tamamen engeller,. Örneğin; çalışanların 2020 yılındaki kayıtlarını getirmek için
WHERE YEAR(IseGirisTarihi) = 2020yazarsanız sistem her bir satırı önce fonksiyondan geçirir. Bunun yerine, tarihi doğrudan aralık olarak vererekWHERE IseGirisTarihi >= '2020-01-01' AND IseGirisTarihi < '2021-01-01'kullanmalısınız; bu sayede sistem indeksleri etkin biçimde kullanır. - Doğru Operatörü Seçin: Performans açısından, kesin eşleşme arayan eşittir (
=) operatörü, metin içinde tarama yapanLIKEoperatöründen genellikle çok daha hızlı çalışır. Dolayısıyla, tam olarak ne aradığınızı biliyorsanız LIKE kullanmaktan kaçının.
Sonuç
Web uygulamalarında, raporlama işlemlerinde veya büyük veri analizlerinde doğru veri setine hızlıca ulaşmak başarının anahtarıdır. WHERE tümcesi verilerinizi gereksiz bilgilerden arındıran bir filtre görevi görürken, LIKE operatörü de kullanıcı aramaları gibi metin bazlı eşleşmelerde en büyük yardımcınızdır. İlerleyen süreçte SQL yeteneklerinizi geliştirirken, WHERE bloğunun çalışma prensiplerini ve indeks optimizasyonu (SARGable) kurallarını akılda tutmak, sorgu sürelerinizi dakikalardan milisaniyelere indirecektir.






Bir Yorum
Thiѕ design is wicked! Youu ost ⅽertainly knbow how to қeep a reader entertained.
Betweеn your wit аnd yⲟur videos, I ᴡaѕ almоst moved to start
my own blog (ԝell, aⅼmost…HaHa!) Wonderful job.
Ӏ reallү enjoyed whаt уou һad to say, ɑnd moore thɑn that,
hօw you рresented it. Ƭoo cool!