Ana içeriğe atla

SQL LIKE Desen Eşleştirme: Örneklerle Pratik Rehber

Belirli dize eşleşmelerinde SQL kayıtlarını filtrelemek için LIKE kullanın. Bu eğitim, LIKE ile wildcard’lar, NOT, LOWER, UPPER ve CASE WHEN kullanımını öğretir.
Güncel 22 Nis 2026  · 8 dk. oku

İster sevin ister sevmeyin, LIKE operatörü SQL’de vazgeçilmezdir. Veri bilimcilerine ve veri mühendislerine belirli dize eşleşmeleri üzerinde verileri filtreleme gücü verir. Bu eğitimde, desen eşleştirme için LIKE kullanımını temelden ileri tekniklere kadar adım adım göstereceğim.

Özet

  • SQL LIKE operatörü desen eşleştirme için iki wildcard kullanır: % (herhangi bir sayıda karakter) ve _ (tam olarak bir karakter)
  • Esnek filtreleme için LIKENOT, LOWER()/UPPER(), OR/AND ve CASE WHEN ile birleştirin
  • Büyük/küçük harf duyarsız eşleştirme için ILIKE (PostgreSQL/Redshift) kullanın veya sütunları LOWER() ile sarın
  • Baştaki % wildcard’ları (örn., %pattern) indeks kullanımını devre dışı bırakır—büyük veri kümeleri için tam metin aramayı düşünün
  • SQL Server, karakter aralıkları için [] ve [^] destekler; MySQL, regex tabanlı eşleştirme için RLIKE destekler

Desen Eşleştirme için SQL LIKE Operatörü

Not: Bu eğitimdeki tüm örnek kodları kendiniz çalıştırmak için, SQL kurulu ve örnek veritabanları bulunan ücretsiz bir DataLab çalışma kitabı oluşturabilirsiniz.

Bir employees tablonuz olduğunu ve ‘A’ ile başlayan tüm isimleri bulmak istediğinizi varsayalım:

employees

emp_no

birth_date

first_name

last_name

gender

hire_date

10001

1953-09-02T00:00:00.000Z

Georgi

Facello

M

1986-06-26T00:00:00.000Z

10002

1964-06-02T00:00:00.000Z

Bezalel

Simmel

F

1985-11-21T00:00:00.000Z

10003

1959-12-03T00:00:00.000Z

Parto

Bamford

M

1986-08-28T00:00:00.000Z

Tabloyu elle taramak için vakit harcayabilirsiniz. Ama elinizde LIKE operatörü varken neden bunu yapasınız?

SELECT DISTINCT
	first_name
FROM employees
WHERE first_name LIKE 'A%'

Buradaki sihir, “`WHERE first_name LIKE ‘A%’`” ifadesindedir; bu, “first_name değeri "A" ile başlayan ve ardından herhangi bir sayıda karakter gelen tüm kayıtları bul” anlamına gelir. Buradaki A% desen olarak bilinir. 

%, LIKE operatörüyle birlikte kullanabileceğiniz tek wildcard değildir. Alt çizgi _ işaretini de kullanabilirsiniz:

  • `%` herhangi bir sayıda karakterle eşleşir.
  • _ tam olarak bir karakterle eşleşir.

Sözdizimi akılda kalıcıdır. Basitçe şöyledir:

column_name LIKE pattern

LIKE ile çeşitli desen eşleştirmeleri yapabilirsiniz. İşte nasıl:

Başlangıç Düzeyi SQL LIKE Örnekleri

Aşağıda, LIKE ifadesini nasıl kullanabileceğinize dair bazı pratik örnekler ve örnek veri setimizden alınan sonuçlar yer alıyor. 

1. Tam dize eşleşmesi için LIKE kullanın

Tam bir dize eşleşmesi yapmak istiyorsanız, ‘%’ veya ‘_’ olmadan LIKE kullanın

SELECT
    first_name, last_name
FROM employees
WHERE first_name LIKE 'Barry' -- the same as WHERE first_name = ‘Barry’

2. Herhangi bir sayıda karakteri eşleştirmek için ‘%’ kullanın 

‘%’, herhangi bir (sıfır dahil) sayıda karakteri eşleştirmek için kullanılabilir – bir rakam, bir harf ya da bir sembol.

Diyelim ki adı ‘Adam’ ile başlayan tüm çalışanları bulmak istiyorsunuz; ‘Adam%’ desenini kullanabilirsiniz

SELECT DISTINCT
    first_name
FROM employees
WHERE first_name LIKE 'Adam%'

"z" ile biten isimleri bulmak için ‘%z’ desenini deneyin. Tek bir desende birden fazla ‘%’ da kullanabilirsiniz. Örneğin, içinde "z" geçen isimleri bulmak için ‘%z%’ kullanın.

3. Tek (ve yalnızca bir) karakteri eşleştirmek için ‘_’ kullanın

Adam asmaca oyunundaki gibi, alt çizgi _ yalnızca bir karakteri karşılar.

Le_n kaç farklı şekilde yazılabilir? Bu desen "Lexn", "LeAn", "Le3n" veya "Le-n" gibi her şeyi eşleştirir.

SELECT DISTINCT
    first_name
FROM employees
WHERE first_name LIKE 'Le_n'

Yalnızca üç karakterden oluşan farklı isimler neler? Desen olarak üç ardışık alt çizgi ___ kullanarak bulabiliriz.

SELECT DISTINCT
    first_name
FROM employees
WHERE first_name LIKE '___'

4. Herhangi bir deseni eşleştirmek için hem ‘%’ hem ‘_’ kullanın

Elbette, ilginç desenler oluşturmak için hem ‘%’ hem de ‘_’ kullanabilirsiniz. 

SELECT DISTINCT
    first_name
FROM employees
WHERE first_name LIKE '%ann_'

‘%ann’ deseni, herhangi bir sayıda karakterle başlayıp "ann" ve bir başka karakter ile biten bir dizeyle eşleşir.

5. Bir desenle eşleşmeyen dizeleri bulmak için NOT kullanın

Belirli bir kritere uymayan tüm satırları bulmak isterseniz ne olur? NOT LIKE operatörünü kullanabilirsiniz. Örneğin, "Staff" haricindeki tüm unvanları bulmak için şu sözdizimini kullanabiliriz

`WHERE title NOT LIKE ‘Staff’`

Bu, aşağıdaki sözdizimiyle tamamen eşdeğerdir

WHERE title != 'Staff'
SELECT DISTINCT
    title
FROM titles
WHERE title NOT LIKE 'Staff'

Elbette, NOT LIKE'ı anlattığımız desenlerin herhangi biriyle kullanabilirsiniz.

SELECT DISTINCT
    title
FROM titles 
WHERE title NOT LIKE '%engineer'

6. Büyük/küçük harf duyarsız desen eşleştirme için LOWER (veya UPPER) ile LIKE kullanın

Desen eşleştirme yapmanız gerekiyor ama dizenin küçük, büyük ya da karma harflerle depolanıp depolanmadığından emin değilseniz aşağıdaki sözdizimini kullanabilirsiniz.

LOWER(column_name) LIKE pattern

LOWER() fonksiyonu, büyük, küçük ya da karma harflerle depolanmış olsalar da tüm dizeleri küçük harfe çevirir. 

Bu sözdizimini kullanırken deseni tamamen küçük harfle yazdığınızdan emin olun! Aksi halde eşleşme alamayabilirsiniz.

Yukarıdaki sözdiziminde LOWER yerine UPPER da kullanabilirsiniz. Deseni büyük harflerle yazdığınızdan emin olun.

`UPPER(column_name) LIKE PATTERN`

Örneğin, bir çalışanın adının "Joanne", "JoAnne", "Joanna" veya "JoAnna" olup olmadığını bulmak için aşağıdakilerden birini deneyin:

SELECT DISTINCT
    first_name
FROM employees
WHERE LOWER(first_name) LIKE 'joann_'
SELECT DISTINCT
    first_name
FROM employees
WHERE UPPER(first_name) LIKE 'JOANN_'

7. OR/AND kullanarak birden çok değerle SQL LIKE

LIKE sözdizimini kullanarak birden çok koşulu da birleştirebilirsiniz. 

Örneğin, birden çok LIKE deseninden en az birini sağlayan sonuçları bulmak için OR koşulunu kullanın.

SELECT DISTINCT
    first_name
FROM employees
WHERE
first_name LIKE 'Ad_l' OR
first_name LIKE 'Ad_m'

Öte yandan, birden çok LIKE koşuluyla eşleşen bir dize bulmak için AND anahtar sözcüğünü kullanın.

SELECT DISTINCT
    first_name
FROM employees
WHERE
first_name LIKE '%am%' AND
first_name LIKE '%me%'

LIKE sözdizimi, değişken uzunluklu karakter (varchar) türünde oldukları sürece birden fazla sütuna uygulanabilir. Bunu bilerek baş harfleri "Z. Z." olan çalışanların isimlerini bulabiliriz

SELECT DISTINCT
    first_name, last_name
FROM employees
WHERE
first_name LIKE 'Z%' AND
last_name LIKE 'Z%'

8. SELECT CASE WHEN içinde LIKE kullanın 

Şu ana kadar LIKEWHERE koşulu içinde kayıt seçmek için bir koşul olarak kullanmaya odaklandık. LIKESELECT ifadesinde de kullanıyoruz. Örneğin, veritabanımızda adı "Adam" olan kaç çalışan olduğunu bulabilir miyiz?

SELECT
    COUNT(CASE WHEN first_name LIKE 'Adam' THEN 1 END) num_employees_adam
FROM employees

Öte yandan, baş harfleri "A.Z." olan kaç çalışan var?

SELECT
    COUNT(CASE WHEN first_name LIKE 'A%' AND last_name LIKE 'Z%' THEN 1 END) num_employees
FROM employees

SQL LIKE’ta yaygın kullanılan desenler

Hızlı başvuru için konuştuğumuz desenlerin özeti burada:

DesenAçıklamaÖrnek kullanım durumu
A%"A" ile başlayan dizelerle eşleşir"A" ile başlayan isimleri bulma
%z%İçinde "z" geçen dizelerle eşleşirİçinde "z" geçen isimleri bulma
Le_n"Len", "Leon" vb. gibi dizelerle eşleşirTek karakter varyasyonu olan isimleri bulma
%ann_"ann" ile bitip ardından bir karakter gelen dizelerle eşleşir"Joann", "Joanna" gibi isimleri bulma

Orta Düzey SQL LIKE Örnekleri

LIKE işlevi, farklı SQL türlerinde (örn. PostgreSQL, MySQL, Redshift, vb.) büyük ölçüde benzerdir. Ancak bazıları, bahsetmeye değer ek LIKE varyasyonlarına sahiptir. 

1. ILIKE operatörü

Redshift ve PostgreSQL’de mevcut olan ILIKE, LIKE'ın büyük/küçük harf duyarsız sürümüdür. Bu nedenle aşağıdakilerin tümü eşdeğerdir.

SELECT
  datacamp ILIKE ‘datacamp’, -- returns TRUE
  DATACAMP ILIKE ‘datacamp’, -- returns TRUE
  Datacamp ILIKE ‘datacamp’, -- returns TRUE
  datacamp ILIKE ‘DataCamp’, -- returns TRUE

2. Wildcard olarak köşeli parantez [] ve [^] kullanımı

T-SQL veya SQL Server kullanıcıları, daha karmaşık desen eşleştirme için ek wildcard karakterlerine sahiptir.

Köşeli parantez sözdizimi [], aralık veya küme içindeki belirli herhangi bir karakterle eşleşir. Örneğin, aşağıdakilerin tümü TRUE döndürür.

SELECT
  ‘Carson’ LIKE ‘[C-K]arson’, -- returns TRUE because C is in the range C-K
  ‘Karson’ LIKE ‘[C-K]arson’, -- returns TRUE because K is in range
  ‘Larson’ LIKE ‘[CKL]arson’, -- returns TRUE because L is in the set [CKL]
  ‘Parson’ LIKE ‘[C-K]arson’ -- returns FALSE because P is out of range

Köşeli parantez içindeki şapka [^] wildcard’ı, belirtilen aralık veya küme içinde olmayan herhangi bir tek karakterle eşleşir. Aşağıdaki sonuçların neden böyle olduğuna bakabilir misiniz? 

SELECT
  ‘Carson’ LIKE ‘[^C-K]arson’ -- returns FALSE 
  ‘Parson’ LIKE ‘[^C-K]arson’ -- returns TRUE

Burada, "C" [C-K] aralığında olduğundan, ‘C’ deseni [^C-K] ile eşleşmeyecektir. Bu nedenle "Carson" [^C-K]arson ile eşleşmezken, "Parson" eşleşir.

3. RLIKE operatörü

MySQL’de mevcut olan RLIKE operatörü, desende düzenli ifadeleri (RegEx) tanır. RegEx, ileri düzey desen eşleştirme için güçlü ve esnek bir araçtır. 

Özellikle SQL türünüz RLIKE destekliyorsa RegEx’i temel düzeyde bilmek faydalıdır. RegEx hakkında daha fazla bilgiyi Python’da Düzenli İfadeler kursumuzda edinebilirsiniz.

SELECT DISTINCT
    first_name
FROM employees
WHERE first_name RLIKE 'Susann[a-e]'

4. ‘~~’ operatörü

PostgreSQL’de ‘~~’, LIKE ile tamamen eşanlamlıdır. ILIKE, NOT LIKE ve NOT ILIKE için de karşılıkları vardır.

Operatör

Eşdeğeri

~~

LIKE

~~*

ILIKE

!~~

NOT LIKE

!~~*

NOT ILIKE

Hata Ayıklama: LIKE ile Sık Yapılan Hatalar

LIKE kullanırken karşılaşabileceğiniz bazı yaygın hatalar ve bunları düzeltme yolları şunlardır:

  1. Sonuç dönmemesi: Büyük/küçük harf duyarlılığını kontrol edin. Bazı SQL lehçelerinde LIKE varsayılan olarak büyük/küçük harf duyarlıdır. Büyük/küçük harf duyarsız eşleşme için LOWER() veya (destekleniyorsa) ILIKE kullanın.
  2. Wildcard’larla beklenmeyen sonuçlar: % ve _ doğru kullanıldığından emin olun. % herhangi bir sayıda karakterle, _ ise tam olarak bir karakterle eşleşir. Bunların yanlış konumlandırılması beklenmedik eşleşmelere yol açabilir.
  3. Performans sorunları: Sorgunuz yavaşsa, desenlerdeki baştaki % kullanımına bakın (örn., %pattern); bu, indeks kullanımını devre dışı bırakır. Mümkünse desenleri belirli bir dizeyle başlayacak şekilde yeniden yazın. Performansla ilgili daha fazlası için aşağıdaki bölüme bakın. 
  4. SQL enjeksiyonu hataları: Sorgunuzda kullanıcı girdisi kullanıyorsanız, SQL enjeksiyonu açıklarını önlemek için girdilerin doğru şekilde parametreleştirildiğinden emin olun.
  5. Desenlerde özel karakterler: Arama dizgesindeki % ve _ gibi wildcard sembolleri, gerçek karakter olarak kastediliyorsa kaçış karakteriyle kaçırılmalıdır. Sorgunuzda bir kaçış karakteri tanımlamak için ESCAPE kullanın.
WHERE column_name LIKE '50\% OFF' ESCAPE '\'

LIKE Operatörünü Kullanırken Performans Hususları

LIKE operatörü harikadır, ancak özellikle büyük veri kümelerinde sorgu performansını etkileyebilir. Kullanımı optimize etmek için bazı hususlar:

  1. İndeksler: Desen Adam% gibi sabit bir dizeyle başlıyorsa veritabanı indeksleri kullanabildiği için LIKE en iyi performansı verir. Ancak %Adam veya %Adam% gibi desenler, büyük tablolar için yavaş olabilen tam tablo taraması gerektirir.
  2. Baştaki wildcard’lardan kaçının: %pattern gibi % ile başlayan desenler indeks kullanımını devre dışı bırakır; veritabanı her kaydı incelemek zorunda kalır.
  3. Sıralama (collation) ve büyük/küçük harf duyarsız eşleşme: Büyük/küçük harf duyarsız aramalar için sütunlarda LOWER() veya UPPER() gibi işlevlerin kullanılması, indekslerin kullanılmasını da engelleyebilir. Bunun yerine, veritabanı sıralamasının büyük/küçük harf duyarsız karşılaştırmalar için uygun şekilde ayarlandığından emin olun.
  4. Alternatif yaklaşımlar: Büyük veri kümeleri için, karmaşık veya sık dize eşleştirmelerinde PostgreSQL’de GIN indeksleri veya MySQL’de FULLTEXT indeksleri gibi tam metin arama ya da veritabanına özgü arama özelliklerini düşünün.
  5. Seçici sorgular: LIKE operatörünün işlediği veriyi azaltmak için tarih aralıkları veya sayısal sütunlar gibi ek filtrelerle sorgularınızın kapsamını sınırlayın.

LIKE ve Tam Metin Arama

Tam metin arama, MySQL, PostgreSQL ve SQL Server gibi veritabanlarında mevcuttur. LIKE basit desen eşleştirmede iyi çalışırken, tam metin arama daha gelişmiş metin sorguları için tasarlanmıştır. İki yaklaşım şöyle karşılaştırılır:

ÖzellikLIKETam Metin Arama
SözdizimiWHERE col LIKE '%term%'MATCH(col) AGAINST('term')
Wildcard’lar%, _Boole operatörleri, doğal dil
İndeks desteğiYalnızca önek desenleri (örn., term%)Adanmış tam metin indeksleri (GIN, FULLTEXT)
Büyük tablolarda performansBaştaki % ile yavaşBüyük metin sütunları için optimize
Alaka sıralamasıYokVar
Dilsel özelliklerYokKök bulma, durak sözcükler, eşanlamlılar
En uygun olduğu durumKesin desenler, küçük ve orta ölçekli veri kümeleriAnahtar sözcük araması, büyük metin sütunları

Desen eşleştirmenin ötesindeki daha gelişmiş dize işlemleri için SQL CONTAINS eğitimine bakın.

SQL LIKE’ı Güvenle Kullanın

SQL işlevlerinde ustalaşmak, veri biliminde başarı için kritik önemdedir ve SQL’in LIKE komutu da bunun istisnası değildir. SQL’e iyi hakim olmak analiz çalışmalarınızı hızlandıracaktır; bu nedenle onu sağlam şekilde öğrenmeye özen gösterin!

SQL ile ilgili daha fazla kaynak için aşağıdakilere göz atın:

SSS

LIKE operatörü sayısal veri tipleriyle kullanılabilir mi?

Hayır, LIKE operatörü, özellikle CHAR, VARCHAR ve TEXT gibi dize veri tipleriyle desen eşleştirme amacıyla kullanılır. Sayısal veri tipleri için =, <, > vb. karşılaştırma operatörleri kullanılır.

LIKE’ın performansı diğer SQL operatörleriyle karşılaştırıldığında nasıldır?

Özellikle % ile başlayan desenlerde tüm tablo taraması gerektirdiğinden, LIKE operatörü diğer SQL operatörlerine kıyasla daha az verimli olabilir. Bu durumlarda indeksleme etkili şekilde kullanılamaz ve bu da büyük veri kümelerinde sorguları yavaşlatabilir.

SQL’de LIKE kullanırken güvenlikle ilgili endişeler var mı?

LIKE tek başına doğası gereği güvensiz değildir; ancak kullanıcı girdilerini doğrudan SQL sorgularında kullanmak SQL enjeksiyonu saldırılarına yol açabilir. Girdileri her zaman temizleyin ve bu riski azaltmak için parametreli sorgular kullanmayı değerlendirin.

ILIKE’ı desteklemeyen bir SQL türünde büyük/küçük harf duyarsız aramalar nasıl yapılır?

ILIKE desteklenmeyen SQL türlerinde, büyük/küçük harf duyarsız aramalar yapmak için LOWER(column_name) LIKE LOWER(pattern) veya UPPER(column_name) LIKE UPPER(pattern) kullanabilirsiniz.

LIKE, ASCII dışı karakterlerle kullanılabilir mi?

Evet, LIKE, veritabanı kodlaması bu karakterleri desteklediği sürece ASCII dışı karakterlerle kullanılabilir. Buna yaygın olarak geniş karakter kümesini destekleyen UTF-8 de dahildir.

Gerçek bir wildcard karakterini (ör. % veya _) aramak için LIKE sorgusunu nasıl değiştirirsiniz?

Gerçek bir % veya _ aramak için bir kaçış karakteri kullanmanız gerekir. Örneğin, SQL Server’da, gerçek bir % içeren dizeleri aramak için LIKE 'A[%]%' ESCAPE '%' kullanabilirsiniz.

LIKE’ı arama yeteneklerini artırmak için diğer SQL işlevleriyle birleştirebilir misiniz?

Evet, LIKE’ı CONCAT veya SUBSTRING gibi işlevlerle birleştirmek arama desenlerini iyileştirmeye yardımcı olabilir. Örneğin, CONCAT kullanmak, diğer sütun değerlerine dayalı desenleri dinamik olarak oluşturabilir.

LIKE, JOIN işlemleriyle birlikte nasıl kullanılabilir?

LIKE, farklı tabloların sütunları arasında desenleri eşleştirmek için JOIN koşullarında uygulanabilir. Örneğin, ON table1.col1 LIKE table2.col2 || '%', table1.col1’in table2.col2 ile başladığı durumlarda tabloları birleştirmek için kullanılabilir.

Karmaşık desen eşleştirme için LIKE’a alternatifler nelerdir?

Daha karmaşık desenler için, MySQL’in RLIKE’ı veya PostgreSQL’in SIMILAR TO gibi düzenli ifadeleri destekleyen SQL türleri kullanılabilir. Bunlar gelişmiş desen eşleştirme için daha zengin bir sözdizimi sunar.

LIKE, sütunlardaki null değerleri nasıl ele alır?

Bir sütun null değerler içerdiğinde, LIKE bu kayıtlarla eşleşmez; çünkü null, herhangi bir dizeye veya desene eşit kabul edilmez. Null değerleri dahil etmek için OR column IS NULL gibi bir koşul kullanın.

Konular

SQL hakkında daha fazlasını öğrenin

Kurs

Data Manipulation in SQL

4 sa
317.1K
Master the complex SQL queries necessary to answer a wide variety of data science questions and prepare robust data sets for analysis in PostgreSQL.
Ayrıntıları GörRight Arrow
Kursa Başla
Devamını GörRight Arrow