SQL LIKE Nedir? Kullanımı Nasıldır? Örneklerle Anlatım

SQL LIKE Nedir?

LIKE ifadesi, SQL dilinde metin tabanlı alanlar üzerinde arama ve filtreleme işlemleri gerçekleştirmek amacıyla kullanılan operatördür. Metin ifadelerinin önceden tanımlanmış desenlerle eşleşip eşleşmediğini tespit etmeye yarar. LIKE operatörü, SQL sorgularında çoğunlukla WHERE koşulu ile birlikte çalışır.

Bu operatör, genellikle iki adet joker karakter ile kullanılır: “%” ve “_”.

  • “%” sembolü, sıfır veya daha fazla karakteri temsil eder.
  •  “_” sembolü, yalnızca tek karakteri temsil eder.

Bu joker karakterler yardımıyla aranan metin desenine göre sonuçlar süzülür.

Örnek olarak; “m%” deseni kullanıldığında, veritabanında “m” harfiyle başlayan tüm ifadeler listelenir. “%a” deseni, “a” harfiyle biten değerleri getirir. “i_e” deseni ise ilk harfi “i”, üçüncü harfi “e” olan metinleri eşleştirir.

LIKE Operatörü Ne İşe Yarar?

LIKE operatörü, veritabanı tablolarında yer alan sütunlar üzerinde tanımlı desenlere göre arama yapılmasını sağlar. Kısmi eşleşme ve desen bazlı sorgulama yapılmasına imkân tanır. Metin içerikli alanlar üzerinde esnek filtreleme gereksinimi bulunan durumlarda yaygın şekilde tercih edilir.

Wildcard karakterler ile birlikte kullanıldığında, sabit eşleşmelere bağlı kalmadan daha kapsamlı arama koşulları oluşturulabilir. Bu yapı, özellikle büyük veri kümeleri içinde belirli kalıplara uyan kayıtların tespit edilmesini kolaylaştırır.

LIKE Operatöründe Kullanılan Wildcard Karakterleri

Wildcard karakterler, LIKE operatörü ile birlikte kullanılarak metinler içerisinde desen eşleşmesi yapılmasını sağlar. Bu karakterler, metin içinde yer alan karakterlerin yerini geçici olarak temsil eder. SQL dilinde kullanılan wildcard karakterleri aşağıda yer almaktadır:

  • % (Percent): Sıfır veya daha fazla karakteri temsil eder.
  • _ (Underscore): Tek karakteri temsil eder.
  • [] (Köşeli Parantez): Parantez içinde belirtilen karakterlerden herhangi birini temsil eder.
  •  – (Tire): Köşeli parantez içinde karakter aralığı tanımlamak amacıyla kullanılır.
PatternAnlamı
‘a%’“a” harfiyle başlayan metinleri eşleştirir
‘%a’“a” harfiyle biten metinleri eşleştirir
‘a%t’“a” ile başlayıp “t” ile biten metinleri eşleştirir
‘%wow%’“wow” ifadesini herhangi konumda içeren metinleri eşleştirir
‘_wow%’“wow” ifadesi ikinci karakterden başlayan metinleri eşleştirir
‘_a%’İkinci karakteri “a” olan metinleri eşleştirir
‘a__%’“a” harfiyle başlayan ve en az iki ek karakter içeren metinleri eşleştirir

SQL LIKE Temel Kullanım Söz Dizimi

LIKE operatörü, SQL sorgularında genellikle WHERE koşulu içerisinde kullanılır ve sütun verilerinin tanımlanan desenle uyumunu kontrol eder. Wildcard karakterler yardımıyla esnek arama yapısı oluşturulur. Temel kullanım söz dizimi aşağıda gösterilmektedir:

SELECT column_name(s)

FROM table_name

WHERE column_name LIKE pattern;

Desenle eşleşmeyen kayıtların listelenmesi amacıyla NOT ifadesi ile birlikte kullanım mümkündür:

SELECT column_name(s)

FROM table_name

WHERE column_name NOT LIKE pattern;

LIKE ile Sık Kullanılan Arama Örnekleri

LIKE operatörünün yaygın kullanım senaryoları aşağıdaki örnekler üzerinden açıklanmaktadır.

  1. Belirli Karakterle Başlayan Verileri Listelemek

LIKE ifadesi kullanılarak, belirli karakter ile başlayan kayıtlar filtrelenebilir. Örnek olarak, “isim” alanında “A” harfiyle başlayan tüm kayıtları getirmek amacıyla aşağıdaki sorgu kullanılabilir:

SELECT * FROM tablo WHERE isim LIKE ‘A%’;

Bu sorgu sonucunda, “isim” sütununda değeri “A” harfiyle başlayan tüm kayıtlar listelenir.

  1. Belirli Karakterle Biten Verileri Listelemek

LIKE operatörü yardımıyla, belirli karakter ile sonlanan veriler tespit edilebilir. Örnek olarak, “isim” alanında “B” harfiyle biten kayıtlar aşağıdaki sorgu ile elde edilir:

SELECT * FROM tablo WHERE isim LIKE ‘%B’;

Bu sorgu, “isim” sütununda “B” harfiyle bitiş yapan tüm değerleri döndürür.

  1. Belirli Desene Uyan Verileri Filtrelemek

LIKE operatörü, başlangıç ve bitiş koşulları tanımlanmış desenlere göre filtreleme yapılmasına imkân tanır. “isim” alanında “A” harfiyle başlayıp “B” harfiyle sonlanan kayıtlar için aşağıdaki sorgu kullanılabilir:

SELECT * FROM tablo WHERE isim LIKE ‘A%B’;

Bu yapı sayesinde, belirtilen desenle uyumlu tüm kayıtlar sonuç kümesine dahil edilir.

Büyük/Küçük Harf Duyarlılığı (Case Sensitivity) Konusu

LIKE operatörünün büyük/küçük harf duyarlılığı, kullanılan veritabanı sistemi ve ilgili yapılandırmaya göre farklılık gösterebilir. Redshift, BigQuery ve Snowflake platformlarında davranış biçimleri aşağıdaki gibidir:

  • Redshift: Varsayılan ayarlarda LIKE operatörü büyük/küçük harf duyarlı çalışır. Büyük/küçük harf ayrımı yapılmayan aramalar için LIKE yerine ILIKE ifadesi tercih edilir.
  • BigQuery: LIKE operatörü büyük/küçük harf duyarlıdır. Harf duyarlılığı olmadan arama yapılması istendiğinde, düzenli ifadelerle çalışan REGEXP_CONTAINS fonksiyonu kullanılır.
  • Snowflake: LIKE operatörünün davranışı, ilgili sütunun sıralama düzenine bağlıdır. Varsayılan sıralama düzeni büyük/küçük harf duyarsız olduğu için LIKE ifadesi de duyarsız çalışır. Ancak sütun, harf duyarlılığı içeren sıralama düzenine sahipse, LIKE operatörü de duyarlı şekilde işlem yapar. Sıralama düzeninden bağımsız olarak, açık biçimde duyarsız arama yapılması amacıyla ILIKE operatörü kullanılabilir.

Kullanılan veritabanı platformuna ait resmi dokümantasyonun incelenmesi, büyük/küçük harf davranışının doğru şekilde anlaşılması açısından önem taşır.

NOT LIKE Kullanımı ve Örnekleri

LIKE operatörünün çalışma mantığı, NOT ifadesi ile tersine çevrilebilir. Bu kullanım, belirtilen desenle eşleşmeyen kayıtların seçilmesini sağlar.

Syntax

SELECT column1, column2, …

FROM table_name

WHERE column NOT LIKE value;

Bu yapı içerisinde:

  • column1, column2, …: Seçilecek sütunları ifade eder
  • table_name: Veri kaynağı olan tablo adını belirtir
  • column: Filtre uygulanacak sütunu gösterir
  • NOT LIKE: Belirtilen desenle eşleşen kayıtları hariç tutar
  • value: Eşleşmesi istenmeyen desen bilgisini temsil eder

Örnek Kullanım

Aşağıdaki sorgu, ülkesi “USA” olmayan tüm müşterileri listeler:

SELECT *

FROM Customers

WHERE country NOT LIKE ‘USA’;

LIKE ile Çoklu Şart Kullanımı (AND – OR)

LIKE operatörü, AND ve OR mantıksal operatörleri ile birlikte kullanılarak daha karmaşık desen eşleştirme koşulları oluşturulmasına imkân tanır. Bu yaklaşım, sorgu sonuçlarını genişletmek veya daraltmak amacıyla tercih edilir.

LIKE ile OR Operatörünün Birlikte Kullanımı

OR operatörü, tanımlanan koşullardan en az uyum sağlayan kayıtların getirilmesini sağlar. Farklı desenlere uyan değerlerin aynı sorgu içerisinde aranması gerektiğinde kullanışlıdır.

SELECT column1, column2

FROM table_name

WHERE column_name LIKE ‘pattern1’

OR column_name LIKE ‘pattern2’

OR column_name LIKE ‘pattern3’;

Örnek:

Adı “S” ya da “A” harfiyle başlayan tüm müşterileri listeleyen sorgu aşağıda yer almaktadır:

SELECT *

FROM Customers

WHERE CustomerName LIKE ‘S%’ OR CustomerName LIKE ‘A%’;

LIKE ile AND Operatörünün Birlikte Kullanımı

AND operatörü, belirtilen koşulların tamamını karşılayan kayıtların seçilmesini sağlar. Çoklu kriter üzerinden daha dar sonuç kümesi elde edilmesi hedeflendiğinde kullanılır.

SELECT column1, column2

FROM table_name

WHERE column_name LIKE ‘pattern1’

AND other_column LIKE ‘pattern2’;

Örnek:

Adı “S” harfiyle başlayan ve şehir adı “L” harfiyle başlayan tüm müşterileri getiren sorgu aşağıda gösterilmektedir:

SELECT *

FROM Customers

WHERE CustomerName LIKE ‘S%’ AND City LIKE ‘L%’;

LIKE Kullanırken Performans Sorunları ve İpuçları

Veritabanı sorgularında performans optimizasyonu, yanıt sürelerinin kısaltılması ve kaynak kullanımının azaltılması açısından kritik önem taşır. LIKE operatörü kullanılan sorgularda sık karşılaşılan hatalı yaklaşımlar ve tercih edilmesi gereken yöntemler aşağıda açıklanmaktadır.

Hatalı Kullanım 1: SELECT * İfadesinin Tercih Edilmesi

SELECT * kullanımı, tablo içindeki tüm sütunların okunmasına neden olur. Büyük tablolar üzerinde çalışıldığında, gereksiz veri okunması performans sorunlarına yol açar.

Doğru Yaklaşım: Gerekli Sütunların Seçilmesi

SELECT * yerine, sorguda ihtiyaç duyulan sütun adlarının açık şekilde belirtilmesi önerilir. Bu yöntem, okunan veri miktarını azaltarak sorgu performansını iyileştirir.

Hatalı Kullanım 2: SELECT İçerisinde Alt Sorgu Kullanımı

SELECT ifadesi içinde yer alan alt sorgular, özellikle sonuç sayısı yüksek olduğunda maliyetli işlemler oluşturur. Bu durum, sorgu süresinin uzamasına neden olur.

Doğru Yaklaşım: Alt Sorgu Yerine JOIN Kullanımı

Alt sorgular yerine JOIN yapılarının tercih edilmesi, veritabanı motorunun sorguyu daha verimli optimize etmesine olanak tanır. JOIN kullanımı, çoklu tablo verilerinin daha hızlı şekilde birleştirilmesini sağlar.

Hatalı Kullanım 3: LIKE ile Başta Joker Karakter Kullanımı

LIKE ifadesinde desenin başında % kullanılması, indekslerin devre dışı kalmasına neden olur. Bu durum, tablo genelinde tarama yapılmasına yol açar ve performansı olumsuz etkiler.

Doğru Yaklaşım: İndeks Kullanımı ve Sonda Joker Karakter Tercihi

Metin alanları üzerinde arama yapılırken, indekslerin etkin şekilde kullanılabilmesi için joker karakterin desenin sonunda yer alması önerilir. Bu yaklaşım, tam tablo taraması yerine indeks destekli arama yapılmasını sağlar ve sorgu süresini düşürür.

LIKE vs. ILIKE (PostgreSQL) – Farkları

LIKE ve ILIKE operatörleri arasındaki tercih, sorgu gereksinimine ve kullanım amacına göre şekillenir. Büyük/küçük harf duyarlı desen eşleştirmesi gerektiğinde LIKE operatörü, harf duyarlılığı olmadan eşleştirme yapılması istendiğinde ise ILIKE operatörü tercih edilir. Ancak seçim aşamasında değerlendirilmesi gereken bazı önemli noktalar bulunmaktadır:

  • Performans:

ILIKE operatörü, karşılaştırma işleminden önce metin ve desen üzerinde ek büyük/küçük harf dönüştürme süreci yürüttüğü için LIKE operatörüne kıyasla daha düşük performans gösterebilir. Veri hacmi yüksek sorgular veya hız optimizasyonu gerektiren senaryolarda LIKE operatörü tercih edilerek daha verimli sonuçlar elde edilebilir.

  • Taşınabilirlik:

ILIKE operatörü PostgreSQL sistemine özgü uzantı niteliği taşır ve farklı veritabanı motorlarında desteklenmeyebilir. Çoklu platform uyumluluğu hedeflenen SQL ifadelerinde, LIKE operatörü ile birlikte UPPER veya LOWER fonksiyonlarının kullanılması önerilir. Bu yaklaşım sayesinde, ILIKE ile elde edilen sonuçlar standart SQL söz dizimi kullanılarak üretilebilir.

  • Tutarlılık:

ILIKE operatörünün ürettiği sonuçlar, veritabanının yerel ayar yapılandırmasına bağlı olarak değişkenlik gösterebilir. Yerel ayar, büyük/küçük harf dönüşüm kurallarını belirler ve sistemler arasında farklılık gösterebilir. Örnek olarak, Almanca dilinde yer alan “ß” ve “SS” gibi karakterler bu duruma etki edebilir. Tutarlı ve öngörülebilir eşleşme sonuçları hedefleniyorsa, LIKE operatörü kullanılarak metin ve desenin açık büyük/küçük harf durumu tanımlanmalıdır.

SQL’de LIKE Yerine Kullanılabilecek Alternatifler

SQL ortamlarında desen eşleştirme ve metin arama işlemleri için LIKE operatörüne ek olarak farklı yöntemler de kullanılabilir. Bu alternatifler, kullanılan veritabanı sistemi ve sorgu gereksinimine bağlı olarak daha yüksek performans veya daha esnek arama imkânı sunabilir.

  • Exact Matching (Tam Eşleşme)

Wildcard kullanılmayan kesin metin karşılaştırmaları için eşitlik operatörü (=) tercih edilebilir. Bu yöntem, desen taraması gerektirmediği için indeksler üzerinde daha hızlı çalışır ve doğrudan eşleşme senaryolarında performans avantajı sağlar.

  • String Fonksiyonları

INSTR, CHARINDEX veya POSITION gibi metin fonksiyonları, belirli alt ifadelerin konumunu tespit etmek amacıyla kullanılır. Bu fonksiyonlar, özellikle LIKE ‘%ifade%’ yapısının kullanıldığı basit senaryolarda alternatif çözüm olarak değerlendirilebilir ve bazı durumlarda daha kontrollü sonuçlar üretir.