MySQL'de Metin Arama ve Karşılaştırma İşlemleri

MySQL'de Metin Arama ve Karşılaştırma İşlemleri

MySQL veritabanında metin arama ve karşılaştırma işlemleri, LIKE ve REGEXP operatörleri gibi birçok seçenek sunmaktadır LIKE operatörü, sabit bir metin arama işlemi gerçekleştirirken, REGEXP operatörü kullanarak belirli düzenli ifade kalıplarına uygun olarak metinler arasında arama yapılabilir COLLATE, BINARY ve UTF-8 karakter setleri kullanarak metin karşılaştırmaları yapmak da mümkündür
LIKE operatörü, metinler arasında basit arama işlemleri yapmak için kullanılır Ancak % işareti kullanarak birkaç karakter arama işlemi yapmak performans düşüklüğüne neden olabilir REGEXP operatörü ise düzenli ifadeler kullanarak metin arama işlemleri yapabilir Bu işlem, arama sırasında belirli metakarakterler kullanarak esnek ve spesifik arama işlemleri yapmayı sağlar
Metin karşılaştırmalarında COLLATE operatörü kullanmak kaydadeğer bir performans artışı sağlar BINARY operatörü ise fark

MySQL'de Metin Arama ve Karşılaştırma İşlemleri

MySQL veritabanı, metin arama ve karşılaştırma işlemleri için birçok seçenek sunmaktadır. Metin arama işlemleri yapmak için LIKE ve REGEXP operatörleri kullanılabilirken, karşılaştırma işlemleri için COLLATE, BINARY, ve UTF-8 karakter setleri kullanılabilir.

LIKE operatörü, metinler arasında basit arama işlemleri yapmak için kullanılır. Bu operatör, metnin içindeki bir kelime ya da karakter dizisini bulmak için kullanılır. REGEXP operatörü ise, Regular Expression yani düzenli ifadeler kullanarak daha özelleştirilmiş arama işlemleri yapmak için kullanılır.

Metin karşılaştırma işlemleri yapmak için COLLATE operatörü, farklı karakter setlerindeki karakterleri karşılaştırmak için BINARY operatörü kullanılır. UTF-8 karakter seti kullanarak karakter karşılaştırmaları doğru şekilde yapılabilirken, NATURAL LANGUAGE SEARCH özelliği de doğal dil arama işlemleri yapmak için kullanılabilir.


LIKE Operatörü

MySQL'de metin arama ve karşılaştırma işlemleri oldukça sık kullanılan özelliklerdendir ve LIKE operatörü genellikle bu işler için kullanılmaktadır. LIKE operatörü, metinler arasında sabit bir metin arama işlemi gerçekleştirir. Bu operatör kullanılarak bir metnin içinde belli bir kelime veya karakter dizisi aranabilir.

LIKE operatörünü kullanmak için WHERE koşuluna şöyle bir kod bloğu ekleyebiliriz:

SELECT * FROM tablo_adi WHERE sutun_adi LIKE 'aranan_metin';

Bu kod bloğu, 'tablo_adi' adlı tablodaki 'sutun_adi' adlı sütun içerisinde, 'aranan_metin' metnini arar. 'aranan_metin' metni tabloda bulunduğu takdirde o satır sonuç olarak döndürülür. Aynı zamanda arama sırasında büyük-küçük harf ayrımı mevcut değildir. Belirtilen metin büyük harfle yazılsa bile arama doğru sonuç verecektir.

LIKE operatörü, tek bir karakter yerine birkaç karakter arama işlemi için de kullanılabilir. Bunun için şu kod bloğu kullanılır:

SELECT * FROM tablo_adi WHERE sutun_adi LIKE '%aranan_metin%';

'%' işareti, aranacak metnin yerini belirlemek için kullanılır. Bu kod bloğu, 'aranan_metin' ifadesinin her iki tarafında bulunan karakterlerin hepsini arar. Yani metin, 'aranan_metin' karakterleri arasında bulunsa bile bu kod bloğu doğru sonuçları verir. Ancak arama işlemi yapılırken kaydadeğer bir performans düşüklüğü yaşanabilir.


REGEXP Operatörü

MySQL veritabanında metin arama ve karşılaştırma işlemleri oldukça sık kullanılan fonksiyonlardır. Bu işlemlerin doğru bir şekilde yapılması, veri tabanlarındaki verilerin etkili bir şekilde aranmasına ve sunulmasına katkıda bulunur. Bu yazımızda MySQL'de metin arama ve karşılaştırma işlemlerinden biri olan REGEXP operatörü ve kullanımı hakkında ayrıntılı bilgi vereceğiz.

REGEXP, "regular expression" kelimelerinin kısaltmasıdır. Düzenli ifadeleri kullanarak metin arama işlemleri yapabilmenizi sağlar. Düzenli ifadeler, metin içinde arama yaparken kullanabileceğiniz belirli sözdizimsel kalıplardır. Bu kalıplar, arama işlemlerini daha esnek ve spesifik hale getirir. Örneğin, metin içinde sadece e-posta adreslerini aramak istediğinizde düzenli ifadeler kullanarak bu işlemi kolaylıkla gerçekleştirebilirsiniz.

REGEXP operatörü, veri tabanındaki metinler arasında düzenli ifadeler kullanarak arama yapmanızı sağlar. Bu operatör, kullanımı kolay ve esnektir. REGEXP operatörü kullanırken, arama yapmak istediğiniz metni belirleyip, düzenli ifade ile karşılaştırarak istediğiniz sonuçları elde edebilirsiniz.

Operatör Açıklama
^ Satır başı
$ Satır sonu
. Herhangi bir karakteri temsil eder.
* 0 ya da daha fazla karakter
+ 1 ya da daha fazla karakter
? 0 ya da 1 karakter
[abc] a, b ya da c karakterlerinden herhangi biri
[a-z] a'dan z'ye kadar olan karakterler
[^abc] a, b ya da c karakterleri haricindeki herhangi bir karakter

Yukarıdaki tabloda, kullanabileceğiniz REGEXP metakarakterleri görülmektedir. Bu metakarakterler, arama işlemlerini daha spesifik hale getirmenize olanak tanır.

Özetlemek gerekirse, REGEXP operatörü, düzenli ifadeleri kullanarak metin içinde arama yapmanızı sağlayan bir işlemdir. Kullanabileceğiniz birçok metakarakteri vardır ve bu metakarakterler, arama işlemlerini daha spesifik hale getirir. Bu operatörü kullanarak, metin içinde aradığınız özellikleri kolaylıkla bulabilirsiniz.


REGEXP Örneği

REGEXP operatörü, belirli düzenli ifade kalıplarına uygun olarak metin arama işlemlerini gerçekleştirir. Bir örnek üzerinden bu işlemi daha detaylı inceleyebiliriz.

Bir örneğe bakalım:

ID Ad
1 Ali Can
2 Ayşe Yılmaz
3 Veli Turan
4 Mehmet Şahin

Eğer "Ali" veya "Veli" isimlerini içeren satırları bulmak istiyorsak, şu sorguyu kullanırız:

SELECT * FROM tablo_adı WHERE ad REGEXP 'Ali|Veli';

Bu sorgu, "Ali" veya "Veli" isimlerini içeren tüm satırları bize gösterir:

ID Ad
1 Ali Can
3 Veli Turan

Bu örnekte, REGEXP operatörüyle birlikte "Ali|Veli" ifadesi kullanarak sorgulama yaptık. Bu sorgu, "Ali" veya "Veli" kelimesini içeren satırları bize gösterir.


REGEXP Metakarakterleri

REGEXP metakarakterleri, metin arama işlemlerinde daha spesifik aramalar yapmak için kullanılan özel karakterlerdir. Bu metakarakterler yardımıyla sadece belirli kalıplara uygun olan metinler aranabilir.

Örneğin, "^" (başlangıç işareti), metni arama işlemini belirli bir kelimenin başlangıcından başlatır. "$" (bitiş işareti) ise metnin belirli bir kelimeyle bitmesini gerektirir. "." (nokta), herhangi bir tek karakteri temsil ederken, "*" (yıldız) bir veya daha fazla karakteri temsil eder. "+", en az bir karakterin eşleşmesini gerektirirken, "?" (soru işareti) tamamen isteğe bağlı bir karakterin eşleşmesine izin verir.

Metakarakter Açıklama
^ Başlangıç işareti
$ Bitiş işareti
. Herhangi bir tek karakter
* Bir veya daha fazla karakter
+ En az bir karakter
? Tamamen isteğe bağlı bir karakter

REGEXP metakarakterleri, metin arama işlemlerinde kullanılmak üzere çok yönlü bir araçtır. Ancak bu metakarakterleri kullanırken dikkatli olunmalı ve yanlış bir metakarakter kullanmak arama sonuçlarınızı etkileyebilir.


REGEXP_INSTR Fonksiyonu

MySQL'in REGEXP_INSTR fonksiyonu, bir metin içindeki belirli bir karakteri aramak için kullanılır. Bu fonksiyon, verilen metindeki bir karakterin konumunu belirler ve sonucu bir tamsayı olarak döndürür. Bu fonksiyon ayrıca düzenli ifadelerle de kullanılabilir.

REGEXP_INSTR fonksiyonu, iki argüman alır. İlk argüman, aranacak metindir. İkinci argüman ise aranacak karakterdir. Aşağıdaki örnekte, bir tabloda bulunan ürün adlarını içeren bir sütun kullanılarak REGEXP_INSTR fonksiyonunu kullanarak "apple" kelimesini arıyoruz:

product_name position
Apple iPhone 11 Pro 1
Samsung Galaxy S21 Ultra 0
Xiaomi Redmi Note 9 Pro 0

Yukarıdaki örnekte, "Apple iPhone 11 Pro" ürün adı, "apple" kelimesini içerdiği için fonksiyon 1 değerini döndürür. Diğer iki ürün ise "apple" kelimesini içermediği için 0 değerini döndürür.

REGEXP_INSTR fonksiyonu, metin içindeki belirli karakterlerin konumunu belirlemede oldukça yararlıdır. Bu fonksiyon özellikle düzenli ifadelerle birlikte kullanıldığında, karmaşık aramaları gerçekleştirmek için kullanışlıdır.


REGEXP_REPLACE Fonksiyonu

MySQL veritabanındaki metin arama ve karşılaştırma işlemleri oldukça önemlidir. Bu işlemler yazılım geliştirme sürecinde sık sık kullanılır ve MySQL’in sunduğu REGEXP_REPLACE() fonksiyonu ile metinler içindeki belirli karakterleri değiştirmek de oldukça kolaylaşır. REGEXP_REPLACE() fonksiyonu, metin içinde belirli bir desenin eşleştiği tüm yerleri başka bir şeyle/şeylerle değiştirmek için kullanılır. Bu fonksiyon için aşağıdakileri dikkate alınması gerekir:

  • Fonksiyonun ilk parametresi değiştirilecek metindir.
  • İkinci parametre desendir - neyi değiştirmek istediğinizi ve hangi metnin yerine kullanmak istediğinizi belirtir.
  • Üçüncü parametre, desenin hangi karakterlerini değiştirmeniz gerektiğini belirtir. Bu parametre zorunlu olmadığından, isteğe bağlıdır.

Bu fonksiyon REGEXP_REPLACE(metin, desen, kullanılacak_metin, Başlangıç_noktası, Bitiş_noktası) şeklinde kullanılabilir. İlk parametre zorunlu olup diğerleri isteğe bağlıdır. Örneğin, aşağıdaki "ürün" tablosundaki "a" harfini "+" işaretine değiştirmemizi sağlayan bir SQL sorgusu yazalım:

id ürün_adi
1 elma
2 armut
3 portakal

SELECT id, REGEXP_REPLACE(ürün_adi, 'a', '+') FROM ürün;

Bu SQL sorgusu sonucunda, "el+ma", "+rm+ut" ve "port+kol" gibi sonuçlar elde edeceğiz. REGEXP_REPLACE() fonksiyonu, farklı kombinasyonlar ve değiştirme seçenekleri ile birlikte kullanılarak, metinler içinde belirli karakterlerin değiştirilmesine olanak tanır.


UTF-8 Karakter Setinde Karşılaştırma

MySQL veritabanında, metin karşılaştırma ve arama işlemleri çok sık kullanılan bir işlemdir. Ancak, farklı karakter setlerine sahip dillerde çalışırken, doğru sonuçlar almak için bazı dikkat edilmesi gerekenler vardır. Özellikle UTF-8 karakter setinde, doğru karşılaştırma yapmak önemlidir.

UTF-8, çok dilli metinleri destekleyen bir karakter setidir ve en yaygın kullanılan karakter setlerinden biridir. Ancak, bazı karakterlerin birden çok temsili olabilir ve bu da karşılaştırmalarda problem yaratabilir. Bu nedenle, doğru sonuçlar almak için, karşılaştırmalar sırasında karakter setlerinin iyi bir şekilde kullanılması gerekir.

UTF-8 karakter setinde doğru şekilde karşılaştırma yapmak için, karşılaştırma işlemini yapmadan önce karşılaştırılacak iki metnin de aynı karakter setine sahip olması gerekir. Ayrıca, işlem yapılacak sütunun karakter setinin de UTF-8 olması gerekmektedir. Bunun için, sütunun karakter seti COLLATE ile belirtilmelidir.

Örneğin, "İstanbul" ve "istanbul" kelimeleri PHPMyAdmin aracılığıyla karşılaştırıldığında, sonuç olarak eşit kabul edilecektir. Ancak, bu karşılaştırmayı yapılan bir uygulamada, doğru şekilde karşılaştırmak istediğimizde COLLATE ile UTF-8 karakter seti açıkça belirtilmelidir. Böylece, büyük harf-küçük harf duyarlılığı kalkar ve doğru karşılaştırma yapılır.


COLLATE Operatörü

MySQL veritabanında farklı dillerde kullanılan karakterlerin karşılaştırılmasında, COLLATE operatörü kullanılır. COLLATE, karakter setinin nasıl karşılaştırılacağını belirler. Çünkü farklı dillerde kullanılan karakterlerin sıralaması birbirinden farklıdır. Örneğin, İngilizce'de kullanılan "a" harfi ile Türkçe'de kullanılan "a" harfi farklı kodlara sahiptir.

COLLATE operatörü, WHERE, ORDER BY vb. sorgularında kullanılabilir. Karşılaştırma nesnesi olarak kullanılan sütunun veya değişkenin sonuna COLLATE işlemi eklenir ve karşılaştırma işlemi bu şekilde yapılır. Örneğin, "name" isimli bir sütunu, yabancı dilde çıktı vermesi gerektiğinde, COLLATE operatörü kullanarak, farklı dil karakterleri ile karşılaştırma işlemi gerçekleştirebiliriz.

Aşağıda örnek bir kullanım gösterilmiştir:

SELECT * FROM example_table WHERE name COLLATE utf8_turkish_ci = 'özgür';

Bu sorgu, "name" sütununda Türkçe "özgür" ismini içeren kayıtları çeker. utf8_turkish_ci, Türkçe karakterlerin karşılaştırılmasında kullanılan bir COLLATE türüdür.

COLLATE operatörü, yalnızca karakter setleri arasındaki karşılaştırmaları etkiler, sayısal değerler veya tarihler üzerinde herhangi bir etkisi yoktur. Bu nedenle, karşılaştırma yapılacak sütunun karakter seti türünü iyi belirlemek gerekir.


COLLATE Örneği

MySQL'de metin arama ve karşılaştırma işlemleri çok önemli bir konudur. Bu işlemler uygulanarak veritabanındaki metin tabloları arasında arama yapılabilir ve farklı dillerin karakterleri karşılaştırılabilir. COLLATE operatörü de bu işlemlere yardımcı olan bir operatördür.

COLLATE operatörünün kullanımı oldukça basittir. Örneğin, bir veritabanında "ürün" adı altında bir tablo varsa ve bu tabloda "ürün adı", "ürün rengi" gibi sütunlar varsa, COLLATE operatörü kullanarak sorgulama yapabilirsiniz. Sorgulama sonucunda Türkçe karakterlerin doğru bir şekilde karşılaştırılması sağlanır.

Örneğin, "ürün adı" sütununda "şampuan" adında bir ürün var. Arama yaparken "şampuan" kelimesi yerine "şampüan" kelimesi yazıldığında, COLLATE operatörü kullanılmadığında sonuç vermez. Ancak COLLATE operatörü kullanıldığında doğru sonuçları almak mümkün hale gelir.

Aşağıdaki tabloda COLLATE operatörü kullanımı örneklendirilmiştir.

ID Ürün Adı Ürün Rengi
1 şampuan mavi
2 sabun sarı
3 krem pembe

Örneğin, "şampüan" kelimesiyle arama yapmak istediğinizde, aşağıdaki örneği kullanabilirsiniz:

SELECT * FROM ürünlerWHERE ürün_adı COLLATE utf8_general_ci = 'şampüan';

Bu örnekte, COLLATE operatörü utf8_general_ci olarak belirtilmiştir. Bu, Türkçe karakterlerin doğru bir şekilde karşılaştırılmasını sağlar. Arama sonucu "şampuan" kelimesi içeren tüm ürünler listelenir.

COLLATE operatörü kullanımı oldukça basittir ve farklı dillerin karakterleri karşılaştırmak için oldukça faydalıdır. Doğru COLLATE operatörü seçimi, arama sonuçlarının doğru ve tutarlı olmasını sağlayacaktır.


BINARY Operatörü

MySQL veritabanında metinleri karşılaştırmak için farklı yöntemler vardır. Bunlardan biri BINARY operatörüdür. BINARY operatörü, karakter dizileri arasında büyük-küçük harf duyarlı karşılaştırma yapar. Bu, ASCII karakter seti dışındaki karakterleri doğru şekilde karşılaştırmak için kullanılabilir.

BINARY operatörünün kullanımı oldukça basittir. Karşılaştırma yapılacak sütunun başına BINARY sözcüğü eklenir. Örneğin, aşağıdaki sorguda "City" sütunu BINARY operatörü kullanılarak karşılaştırılır:

# City Country
1 New York USA
2 new york USA

SELECT * FROM Customers WHERE BINARY City = 'New York'

Bu sorgu, yalnızca büyük harf "N" ve "Y" kullanarak yazılan "New York" satırını döndürür. Küçük harf "n" ve "y" kullanılarak yazılan satırı döndürmez.

Özetle, BINARY operatörü kullanarak, ASCII karakter seti dışındaki karakterleri doğru şekilde karşılaştırabilirsiniz. Bu, özellikle büyük ve küçük harflerle ilgili sorunları çözmek için yararlıdır.


NATURAL LANGUAGE SEARCH

MySQL'in doğal dil arama özelliği olan NATURAL LANGUAGE SEARCH, kullanıcıların anahtar kelime kullanarak veri tabanındaki metinleri aramasına olanak tanır. Bu özellik, kullanıcıların arama yaparken doğal olarak ifade edeceği kelimeleri kullanmasına izin verir.

Bu özelliği kullanabilmek için, uygun bir sütun tipine (TEXT, CHAR veya VARCHAR) sahip bir sütunda FULLTEXT dizini oluşturmanız gerekiyor. FULLTEXT dizini, metinlerin içinde arama yapmanızı sağlayan bir yapıdır.

Örneğin, bir web sitesindeki makaleleri aramak istiyorsanız, makalelerin depolandığı sütunda FULLTEXT dizini oluşturmanız gerekiyor.

Doğal dil arama yapmak için, MATCH() AGAINST() fonksiyonunu kullanmanız gerekiyor. Fonksiyonun ilk parametresi aranacak metinleri, ikinci parametresi anahtar kelimeleri içerir.

Örneğin, şu şekilde bir sorgu kullanarak “çikolata tarifi” anahtar kelimelerini kullanarak makaleleri arayabilirsiniz:

Sorgu Açıklama
SELECT * FROM makaleler WHERE MATCH(baslik, icerik) AGAINST ('çikolata tarifi'); makaleler tablosunda başlık ve içerik sütunlarında "çikolata tarifi" anahtar kelimesini arar.

Eğer birden fazla anahtar kelime kullanmak isterseniz, kelime aralarına boşluk bırakarak eklemeniz yeterli olacaktır.

Not: NATURAL LANGUAGE SEARCH, veritabanındaki metinlere iyi bir şekilde düzenlemiş ve doğru bir şekilde FULLTEXT dizinlemiş olmanız gerektiğinden biraz karmaşık bir özelliktir. Bununla birlikte, doğru şekilde kullanıldığında, kullanıcıların aradıkları içeriği daha bulunabilir hale getirmelerine yardımcı olabilir.