MS SQL Eğitimlerimize LIKE operatörünün yardımcı elemanları ile devam ediyoruz.
LIKE deyimi bize arama ve filtreleme de çok fazla opsiyon sağlayarak verilerle daha iyi işlemler yapmamıza yardımcı oluyor demiştik.
Bugün bu arama yeteneklerimizi biraz daha geliştiren LIKE operatörünün yardımcı elemanlarını göreceğiz.
_ Alt Tire İşareti
Bu işaret bir karakterin yerini tutmak için kullanılır.
Örneğin İsminin ilk 3 harfi MUR ama 4. harfinin herhangi bir değer olmasını 5. harfinin T olmasını ve sonrasında herhangi bir değer alabilir ifadesini istediğimizde sorguyu yazarken MUR_T% yazarız. Burada _ gördüğümüz yere istediğimiz her harf gelebilir.
Bunu şimdi XENONBOX veri tabanımızda CUSTOMER tablomuzda bir sorgu yazalım.
İlk 2 harfi AN olan 3. harfinin herhangi bir değer olduğu 4. harfinin O olduğu kişileri listeleyelim.
SELECT * FROM CUSTOMER WHERE FIRSTNAME LIKE 'AN_O%'
3 | Antonio | Moreno | México D.F. | Mexico | (5) 555-3932 |
Alt Tire ifadesini istediğiniz kadar kullanabilirsiniz ve sadece bir karakterin yerini alacaktır.
SELECT * FROM CUSTOMER WHERE FIRSTNAME LIKE 'AN_O_İ%'
3 | Antonio | Moreno | México D.F. | Mexico | (5) 555-3932 |
[Değer1,Değer, , DegerN] İstediğimiz Kadar Karakteri Sorgulama
Bazen aradığımız yerde sadece bir harfin olmasını değil belirli birden fazla karakterinde olabileceği durumlar olabilir. Böyle durumlarda [Değer1,Değer, , DegerN] ifadesi kullanılır.
Örneğin baş harfi A,B ve C olanları listelemek istersek şöyle yazmamız yeterli olacaktır.
SELECT * FROM CUSTOMER WHERE FIRSTNAME LIKE '[A,B,C]%'
2 | Ana | Trujillo | México D.F. | Mexico | (5) 555-4729 |
3 | Antonio | Moreno | México D.F. | Mexico | (5) 555-3932 |
5 | Christina | Berglund | Luleå | Sweden | 0921-12 34 65 |
19 | Ann | Devon | London | UK | (171) 555-0297 |
21 | Aria | Cruz | Sao Paulo | Brazil | (11) 555-9857 |
26 | Carine | Schmitt | Nantes | France | 40.32.21.21 |
31 | André | Fonseca | Campinas | Brazil | (11) 555-9482 |
35 | Carlos | Hernández | San Cristóbal | Venezuela | (5) 555-1340 |
41 | Annette | Roulet | Toulouse | France | 61.77.61.10 |
46 | Carlos | González | Barquisimeto | Venezuela | (9) 331-6954 |
Bunu bu şekilde istediğiniz gibi şekillendirebilirsiniz.
Not: Arama yaparken büyük yada küçük harf duyarlılığı yoktur. [A,B,C] yerine [a,b,c] yazsanız da aynı sonucu alırsınız.
[A-Z] İfadesi İle Aralık Sorgulama
Yukarıdaki örneğimizde 3 karakterli bir arama yapmıştık. Ama 15 karakterin varlığını sorgulasaydık tek tek yazmak çok pratik bir çözüm değil. Bunun yerine bir aralık belirtiyoruz.
Baş harfi A ve K arasındaki tüm karakterlerin olabileceği kişileri listeleyelim.
SELECT * FROM CUSTOMER WHERE FIRSTNAME LIKE '[A-K]%'
2 | Ana | Trujillo | México D.F. | Mexico | (5) 555-4729 |
3 | Antonio | Moreno | México D.F. | Mexico | (5) 555-3932 |
5 | Christina | Berglund | Luleå | Sweden | 0921-12 34 65 |
6 | Hanna | Moos | Mannheim | Germany | 0621-08460 |
7 | Frédérique | Citeaux | Strasbourg | France | 88.60.15.31 |
10 | Elizabeth | Lincoln | Tsawassen | Canada | (604) 555-4729 |
13 | Francisco | Chang | México D.F. | Mexico | (5) 555-3392 |
16 | Elizabeth | Brown | London | UK | (171) 555-2282 |
18 | Janine | Labrune | Nantes | France | 40.67.88.88 |
19 | Ann | Devon | London | UK | (171) 555-0297 |
[^] İşareti İle Verilen Dizinin Değilini Getirme
Bir önceki dersimizde NOT LIKE ifadesini görmüştük. Burada alternatif bir yöntem söyleyelim. örneğin baş harf A ve L arasında olmayanları listeleme istiyoruz. Bunu ilk bildiğimiz haliyle şöyle yapabiliriz.
SELECT * FROM CUSTOMER WHERE FIRSTNAME NOT LIKE '[A-L]%'
1 | Maria | Anders | Berlin | Germany | 030-0074321 |
4 | Thomas | Hardy | London | UK | (171) 555-7788 |
8 | Martín | Sommer | Madrid | Spain | (91) 555 22 82 |
9 | Laurence | Lebihan | Marseille | France | 91.24.45.40 |
11 | Victoria | Ashworth | London | UK | (171) 555-1212 |
12 | Patricio | Simpson | Buenos Aires | Argentina | (1) 135-5555 |
14 | Yang | Wang | Bern | Switzerland | 0452-076545 |
15 | Pedro | Afonso | Sao Paulo | Brazil | (11) 555-7647 |
17 | Sven | Ottlieb | Aachen | Germany | 0241-039123 |
20 | Roland | Mendel | Graz | Austria | 7675-3425 |
Şu şekilde farklı bir yolla da çözebiliriz.
SELECT * FROM CUSTOMER WHERE FIRSTNAME LIKE '[^A-K]%'
1 | Maria | Anders | Berlin | Germany | 030-0074321 |
4 | Thomas | Hardy | London | UK | (171) 555-7788 |
8 | Martín | Sommer | Madrid | Spain | (91) 555 22 82 |
9 | Laurence | Lebihan | Marseille | France | 91.24.45.40 |
11 | Victoria | Ashworth | London | UK | (171) 555-1212 |
12 | Patricio | Simpson | Buenos Aires | Argentina | (1) 135-5555 |
14 | Yang | Wang | Bern | Switzerland | 0452-076545 |
15 | Pedro | Afonso | Sao Paulo | Brazil | (11) 555-7647 |
17 | Sven | Ottlieb | Aachen | Germany | 0241-039123 |
20 | Roland | Mendel | Graz | Austria | 7675-3425 |
Böylelikle bu dersimizin de sonuna geldik. Görüşmek üzere.