TOP

SQL-Ders 5. Joker karakterler ve düzenli ifadeler (LIKE)

Genellikle verileri filtrelemek için koşulun tam eşleşmesine göre değil yaklaşık bir değere göre örnekleme yapmamız gerekir. Yani, örneğin adı belirli bir kalıpla eşleşen (düzenli ifade) veya belirli sembol veya kelimeleri içeren bir ürünü aradığımızda. Bu tür amaçlar için, SQL'de yaklaşık değerleri arayan bir LIKE operatörü vardır. Böyle bir model oluşturmak için meta karakterler (değerin bir kısmını aramak için özel karakterler) kullanılır, yani: "yüzde işareti" (%) veya yıldız işareti (*), "alt çizgi" (_) veya "soru işareti" (?) , "köşeli parantezler" ([ ]).


1. Metakarakter yüzde işareti (%) veya yıldız işareti (*)

Örneğin tablomuzdan yalnızca adında Skis kelimesini içeren ürünlerle ilgili kayıtları seçelim. Bunu yapmak için uygun bir şablon oluşturacağız:

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product LIKE '*Skis*'

Gördüğünüz gibi, DBMS yalnızca Ürün sütununda Skis kelimesini içeren ürünleri içeren kayıtları seçti.

Bu örnekte yıldız işareti (*) meta karakteri kullanılmaktadır çünkü MS Access, LIKE operatörü için "yüzde işaretini" (%) desteklememektedir.

2. Meta karakter alt çizgisi (_) veya soru işareti (?)

Bir sözcükteki tek bir karakterin yerine alt çizgi veya soru işareti kullanılır. Bikes kelimesindeki tüm sesli harfleri "soru işareti" (?) ile değiştirelim ve sonucu görelim:

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product LIKE 'B?k?s'
MS Access, LIKE operatörü için "alt çizgi"yi (_) desteklemediğinden "soru işareti" (?) meta karakterini kullandık.

3. Metakarakter köşeli parantezler ([ ])

Köşeli parantez meta karakteri ([ ]), aynı anda aranacak karakter kümesini belirtmek için kullanılır.

SELECT * 
FROM Sumproduct 
WHERE City LIKE '[TN]*'

Yukarıdaki örnekte City alanında şehir adlarının T veya N harfiyle başladığı kayıtları seçtik.

Köşeli parantez meta karakteri ([ ]), MySQL lehçesinde desteklenmez.

Ayrıca bu durumda bunun tersini yapan başka bir meta karakter kullanabiliriz. Normal ifademize "eşit değil" anlamına gelen bir ünlem işareti (!) (MS Access için) veya güç işareti (^) (diğer DBMS için) ekleyelim.

SELECT * 
FROM Sumproduct 
WHERE City LIKE '[!TN]*'

Yani son oluşturduğumuz sorgu şu şekilde okunacaktır: Sumproduct tablosundaki tüm sütunları seç ve yalnızca City alanındaki şehir adlarının T veya N harfleriyle başlamadığı kayıtları seç. "köşeli parantez" meta karakterindeki harf kümesi, metinde yalnızca bir konuma karşılık gelir.

Zaten bildiğimiz NOT operatörünü kullanırsak da benzer bir sonuç elde edebiliriz ancak ünlem işareti (!) ile kayıt daha kısa olacaktır.