عملگر LIKE در دیتابیس SQL

اکثر اوقات در شرط های نوشته شده در درخواست (query) هایمان روی دیتابیس از شرط های برابری استفاده میکنیم، اما گاهی اوقات نیاز داریم تا به جای برابر بودن یک مقدار، بتوانیم یک الگوی خاص را مورد جستجو قرار دهیم. برای بررسی یک الگوی خاص در کوئری های SQL میتوان از عملگر LIKE استفاده کرد. در این مقاله قصد داریم به بررسی و آموزش این عملگر بپردازیم.

 

عملگر LIKE در ساختار SQL

در ساختار کلی یک کوئری SQL بخش هایی داریم که میتوانیم شرط محدود کننده ای برای انتخاب هایمان بیاوریم. مثلاً

  • نام مشتری دقیقا “امیرحسین” باشد.
  • سفارش در تاریخ 1398-03-07 در سیستم ثبت شده باشد.
  • ایمیل ثبت شده کاربر در سیستم name@gmail.com باشد.
  • و نمونه های مشابه دیگری که در هنگام جستجو، فیلد مورد نظر را برای مساوی بودن با مقدار داده شده بررسی میکند.

معمولاً اینگونه شرط ها در جلوی عبارت WHERE آورده میشود. (به جای هر condition)

WHERE condition1 [[AND / OR] condition2 …];

 

حال فرض کنید بخواهیم به جای تطابق دقیق عبارت مورد نظر، فیلد مورد نظر را با الگوی خاصی مورد بررسی قرار داده و در صورت تطابق، آن رکورد را انتخاب کنیم.

برای درک مفهوم الگو، سه مثال گفته شده در بالا را به صورت الگو بیان میکنیم.

  • نام مشتری با “امیر” شروع شود.
  • سفارش در روز هفتم ماه ثبت شده باشد؛ یعنی تاریخ هایی به صورت *-*-07 را مورد بررسی قرار دهیم.
  • سرویس دهنده ایمیل کاربر برایمان اهمیتی نداشته باشید و بخواهیم هرگونه ایمیلی مشابه name@* را بررسی کنیم.

 

الگوی کلی استفاده از LIKE در پرس و جو های SQL چیزی مشابه زیر است. که این تکه عبارت میتواند به عنوان یک condition در جلوی WHERE ظاهر شود.

column_name LIKE pattern

 

در مثال های گفته شده در این مقاله، با دستور SELECT سر و کار خواهیم داشت. اما همانطور که گفته شد، عملگر LIKE در جلوی عبارت WHERE آورده میشود و هر کجا بتوانیم WHERE را استفاده کنیم عملگر LIKE نیز قابل استفاده خواهد بود.

 

چگونگی ایجاد الگو برای عملگر LIKE

الگوی ورودی برای عملگر LIKE به صورت یک رشته (درون کوتیشن ') در جلوی آن قرار داده میشود. اما چطور یک رشته را به صورت الگو تعریف کنیم ؟

برای ایجاد رشته الگوی مدِ نظر از دو علامت کلیدی که اغلب با همین اپراتور در ارتباط هستند استفاده میشود.

  • علامت % : علامت درصد معرف وجود صفر، یک یا تعداد بیشتر حرف به جای خودش است.
  • علامت _ : علامت تاکید (یا همان underscore) معرف وجود دقیقاً یک حرف به جای خودش است.

اگر با عبارات منظم (Regular Expressions) آشنایی داشته باشید، علامت % چیزی معادل * در یک عبارت منظم و علامت _ معادل علامت ? در اینگونه عبارات خواهد بود.

اکنون که با علامت های مورد استفاده در رشته الگوی LIKE آشنا شدیم، میتوانیم با ترکیب این علامت ها و حروف و کلمات مورد نظرمان، یک رشته به صورت الگو بسازیم و از آن در پرس و جو های خود استفاده کنیم.

 

با استفاده از ترکیب حروف ثابت مورد نظر و نیز علامت های ویژه % و _ میتوان رشته الگوهایی مشابه زیر ساخت و به عنوان الگو در پرس و جوهای نوشته شده قرار داد.

هر الگو با مقدار موجود در ستون مورد نظرمان در رکورد مورد بررسی، تطابق داده شده و نتیجه حاصل خواهد شد.

  • s% : هر عبارتی که ابتدای آن s باشد. (عبارت با s شروع شود)
  • %s : عبارت با s خاتمه یابد.
  • %aa% : در هر قسمتی از عبارت، دو حرف a کنار هم قرار گرفته است.
  • _r% : دومین حرف در این عبارت می بایست r باشد.
  • a_%_% : هر عبارتی که با a شروع شده و حداقل دارای دو حرف دیگر غیر از آن (مجموعاً سه حرف) باشد.
  • a_%n : هر عبارتی که با a شروع شده، بعد از آن حتما یک حرف وجود داشته باشد و با n پایان یابد.

به طور مشابه میتوانید هر گونه الگوی دیگری با طول و پیچیدگی بیشتر تولید کنید.

 

استفاده از عملگر LIKE در پایگاه داده

خروجی عملگر LIKE به صورت true یا false بوده و میتوان از آن در هر جایی که نیاز به بررسی و داشتن یک خروجی به صورت boolean داشته باشیم استفاده کرد.

فرض کنید میخواهیم در ستون آدرس مشتریان سیستم خود به دنبال یک الگو بگردیم. در نیتجه یک query با ساختار کلی زیر خواهیم داشت.

SELECT *
FROM customers
WHERE address LIKE pattern

 

به جای کلمه pattern رشته الگوی ساخته شده را قرار میدهیم. به مثال های زیر توجه کنید.

1- تمام مشتریانی که آدرس آنها با cityName آغاز میشود.

SELECT *
FROM customers
WHERE address LIKE 'cityName%'

 

2- تمام مشتریانی که در آدرسشان کلمه specialName وجود دارد.

SELECT *
FROM customers
WHERE address LIKE '%specialName%'

 

استفاده از چند الگو در عملگر LIKE در جستجوی دیتابیس

همانطور که گفته شد، خروجی عملگر LIKE به صورت بولین است، در نتیجه میتوان چندین عملگر LIKE را برای یک شرط با یکدیگر ترکیب AND یا OR کرد.

3- پیدا کردن تمام مشتریانی که نامشان با sa یا am شروع شده باشد.

SELECT *
FROM customers
WHERE name LIKE 'sa%' OR name LIKE 'am%'

 

4- تمام مشتریانی که در نامشان reza وجود داشته و ایمیلشان در سرویس دهنده گوگل (gmail) قرار دارد.

SELECT *
FROM customers
WHERE name LIKE '%reza%' AND email LIKE '%@gmail.com'

 

منفی کردن نتیجه عملگر LIKE

میتوانیم به راحتی نتیجه عملگر را برعکس و منفی کرده و از آن استفاده کنیم.

5- مشتریانی که نامشان با a شروع نشده باشد.

SELECT *
FROM customers
WHERE name NOT LIKE '%a'