عملگر LIKE در MySQL

منتشر شده در 21 مارس 2020 آخرین به روز رسانی در 22 فوریه 2021
مهندس طهماس زاده
2677 0
عملگر Like

این پست با مسیر متخصص MySQL مرتبط است. مشاهده مسیر (Roadmap)

از سری آموزش های MySQL می خواهیم در مورد دوتا از عملگر های SQL یعنی عملگر Like در MySQL و عملگر REGEXP‌ در MySQL صحبت کنیم. توصیه می کنیم تا انتهای آموزش با تاتژن همراه باشید.

عملگر LIKE در MySQL:

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

خب بریم ببینیم چطوری می شود یک همچین الگویی را پیاده سازی کرد…

قالب کلی کد شما باید به شکل زیر باشد:

SELECT “ROWS_NAME”
FROM “TABLE_NAME”
WHERE “ROWS_NAME” LIKE “YOUR ORDER”

جدول ناظر را در زیر مشاهده می کنید:

عملگر REGEXP‌ در MySQL
Database Like | MySQL

مساله) در جدول ناظران، اطلاعات افرادی را استخراج کنید که حرف اول نام آن ها S باشد.

پاسخ: با توجه به اطلاعات خواسته شده در مساله متوجه می شویم که هیچ گونه ستون خاصی مد نظر نیست پس تمامی ستون ها در خروجی نمایش داده می شوند اما با توجه به شرط گذاشته شده باید اطلاعاتی استخراج بشن که حرف اول نام آن ها “س” یا “S” باشد.

کد:

SELECT *
FROM nazer
WHERE name LIKE ‘s%’
خروجی :
Database Like | MySQL
Database Like | MySQL

نکته: علامت درصد”%” در بعد از حرف s به این معناست که حروف بعد از s اهمیتی ندارند و فقط لازم است اسامی با حرف s‌ شروع شوند. به همین علت علامت درصد در بعد از حرف s آوردیم.

نکته: اگرحرفی در بین دو علامت درصد “%” قرار بگیرد یعنی مکان حرف مورد نظر اهمیت ندارد فقط کافیه این حرف در کلمه باشد.

اما اگر “%” را قبل از s بیاوریم چی؟

مساله) اطلاعات افرادی که نام آن ها با حرف “D”‌ یا “د” تمام شود.

کد:

SELECT *
FROM nazer
WHERE name LIKE ‘%d’
خروجی:
عملگر like
عملگر like

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

 

تمرین: اطلاعات افرادی را بنویسید که اسم آن ها با “s” شروع شده و با حرف “d” پایان می یابد.

در بالا حالتی را بررسی کردیم که برایمان اصلا اهمیت نداره اسامی چند حرفی هستند فقط اگر شرط ما برای آن ها برقرار بود در خروجی چاپ می شدند.

حال فرض کنید می خواهیم تعداد حروف اسامی برای ما حائز اهمیت باشد فرضا حتما اسامی که نمایش داده می شود پنج حرفی باشند و یا اینکه حرف اول آن ها با “s”‌ شروع بشود اما پنج حرفیم باشند.

ما این کار را می توانیم با خط فاصله یا “_” انجام بدهیم. به این صورت که به ازای هر حرف یک “_” قرار می دهیم. در ادامه ی پست به کد توجه کنید تا بهتر درک کنید.

مساله) اطلاعات افرادی که اسامی آن ها با حرف “s” شروع شده باشد و حتما اسم آن ها پنج حرفی باشد.

پاسخ) قالب کد که تغییری نمی کند اما باید به شرط خواسته شده توجه کنید.

کد:

SELECT *
FROM nazer
WHERE name LIKE ‘s____’

در کد بالا من حرف “s” را نوشتم و در ادامش 4 تا “_” گذاشتم-اسامی باید پنج حرفی باشند-تا شرط مساله برقرار باشد.

خروجی:
عملگر like
عملگر like

در خروجی بالا می بیند که تمامی اسامی پنج حرفی که با حرف “s” شروع شده اند نمایش داده شده است که نام های “saeed”‌ و “saman” را شامل می شود.

 

عملگر REGEXP‌ در MySQL:

این عملگر شبیه به عملگر LIKE عمل می کند اما بسیار قدرتمندتر و کاربردی تر و اینکه استفاده ازش هم راحت تر است.

کلمه REGEXP مخفف کلمه ی REGULAR EXPRESSION  هست که در اصل برای الگو گذاشتن برای داده های رشته ای به کار برده می شود که در ادامه به عملکرد خیلی جالب این عملگر می پردازیم.

با توجه به جدول ناظر که در بالا اشاره شده، مسائل و تحلیل آن ها بررسی می کنیم.

مساله) اطلاعات افرادی که حرف “S”‌ در آن ها وجود داشته باشد.

پاسخ) برای این مساله به دو روش می توانیم کد بنویسیم که من هر دو را می نویسم تا تفاوتشان را از نزدیک ببینید.

با استفاده از عملگر LIKE:

SELECT *
FROM nazer
WHERE name LIKE ‘%S%’

با استفاده از عملگر REGEXP :

SELECT *
FROM nazer
WHERE name REGEXP ‘S’

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

خروجی:
عملگر REGEXP‌ در MySQL
عملگر like در MySQL

در جدولی که به عنوان خروجی نمایش داده شده مشاهده می کنید اسامی هستند بدون در نظر گرفتن موقعیت حرف “S” در کلمه در خروجی چاپ شده اند.

مساله) اطلاعات افرادی که اسامی آن ها با حرف “S”‌ شروع شده است.

با استفاده از عملگر LIKE:

SELECT *
FROM nazer
WHERE name LIKE ‘S%’

با استفاده از عملگر REGEXP:

SELECT *
FROM nazer
WHERE name REGEXP ‘^S’

در عملگر REGEXP‌ برای اینکه نشان دهیم حتما حرف باید در ابتدا کلمه باشد از علامت”^”  استفاده می کنیم.

خروجی:
عملگر REGEXP‌ در MySQL
عملگر like در MySQL

مساله: اطلاعات افرادی که در اسامی آن ها حرف آخر “D”‌ باشد.

با استفاده از عملگر LIKE:

SELECT *
FROM nazer
WHERE name LIKE ‘%D’

با استفاده از عملگر REGEXP:

SELECT *
FROM nazer
WHERE name REGEXP ‘D$’
خروجی :
عملگر like در MySQL
عملگر like در MySQL

مساله) اطلاعات افرادی که در اسامی آن شامل یکی از دو حرف‌ “SA” یا “AH” یا “ZA” باشد.

پاسخ:

برای نوشتن این کد توسط عملگر  LIKE‌ بسیار سخت و ناخواناست به همین علت به عملگر REGEXP‌ روی می آوریم.

SELECT *
FROM nazer
WHERE name REGEXP ‘SA|AH|ZA’

در کد بالا می بینید که برای نشان دادن اجتماع برای داده ها از علامت  “|” استفاده شده است.

خروجی:
عملگر like در MySQL

مساله) اطلاعات افرادی که اخرین حرف اسم آن ها “d” باشه و قبل از آن یکی از سه حرف “N”  و “E“و”A” باشد.

پاسخ) برای این کار باید سه حرفی که می خواهیم در قبل از کلمه ی آخر قرار بگیرد در درون براکت قرار دهیم.

در خروجی باید سه کلمه ای که آخر آن ها به صورت “AD” و “ED” و “ND” وجود دارد نمایش داده شود.

کد:

SELECT *
FROM nazer
WHERE name REGEXP '[NAE]D'
خروجی:
عملگر like در MySQL

فرض کنید می خواستیم اگر حروف A تا E قبل از کلمه ی ما قبل آخر وجود داشت در خروجی نمایش داده شود برای اینکار لازم نیست تک تک حروف را مانند کد بالا بنویسم بلکه می توانیم از علامت “-“ استفاده کنیم. به کد زیر توجه کنید.

SELECT *
FROM nazer
WHERE name REGEXP '[A-E]D'
خروجی :
عملگر like در MySQL

تمرین: با استفاده از عملگر REGEXP اطلاعات افرادی را بدست آورید که:

الف) اول اسم آن ها با “A” شروع شود و یا اسم آن ها شامل حرف “H”‌ شود.

ب) اول اسم آن ها با “S” و اخرین حرف اسمشان با “D” تمام شود.

ج) اسم هایی که شامل حرف “A” باشد و به دنبال آن یکی از حروف “H” و “N” و “R”‌ باشد.

به پایان آموزش عملگر like در MySQL و عملگر REGEXP‌ در MySQL رسیدیم. چنانچه ابهام و اشکال داشتید، در بخش نظرات مطرح نمایید.