این پست با مسیر متخصص MySQL مرتبط است. مشاهده مسیر (Roadmap)
از سری آموزش های MySQL می خواهیم در مورد دوتا از عملگر های SQL یعنی عملگر Like در MySQL و عملگر REGEXP در MySQL صحبت کنیم. توصیه می کنیم تا انتهای آموزش با تاتژن همراه باشید.
عملگر LIKE در MySQL:
ممکن است از شما خواسته شود اطلاعات خاصی را استخراج کنید که از یک الگوریتم و یا الگوی خاصی پیروی کنند. به طور مثال از شما خواسته شود اطلاعات ناظرانی را بدهید که حرف اول اسمشان A باشد یا حرف آخر کلمه ی خاصی باشد یا اینکه برای شما اهمیتی نداره که اول یا آخر باشه فقط می خواید این حرف در اسامی وجود داشته باشد.
خب بریم ببینیم چطوری می شود یک همچین الگویی را پیاده سازی کرد…
قالب کلی کد شما باید به شکل زیر باشد:
SELECT “ROWS_NAME” FROM “TABLE_NAME” WHERE “ROWS_NAME” LIKE “YOUR ORDER”
جدول ناظر را در زیر مشاهده می کنید:
مساله) در جدول ناظران، اطلاعات افرادی را استخراج کنید که حرف اول نام آن ها S باشد.
پاسخ: با توجه به اطلاعات خواسته شده در مساله متوجه می شویم که هیچ گونه ستون خاصی مد نظر نیست پس تمامی ستون ها در خروجی نمایش داده می شوند اما با توجه به شرط گذاشته شده باید اطلاعاتی استخراج بشن که حرف اول نام آن ها “س” یا “S” باشد.
کد:
SELECT * FROM nazer WHERE name LIKE ‘s%’
خروجی :
نکته: علامت درصد”%” در بعد از حرف s به این معناست که حروف بعد از s اهمیتی ندارند و فقط لازم است اسامی با حرف s شروع شوند. به همین علت علامت درصد در بعد از حرف s آوردیم.
نکته: اگرحرفی در بین دو علامت درصد “%” قرار بگیرد یعنی مکان حرف مورد نظر اهمیت ندارد فقط کافیه این حرف در کلمه باشد.
اما اگر “%” را قبل از s بیاوریم چی؟
مساله) اطلاعات افرادی که نام آن ها با حرف “D” یا “د” تمام شود.
کد:
SELECT * FROM nazer WHERE name LIKE ‘%d’
خروجی:
همانطور که در خروجی می بینید لیست افرادی نمایش داده شده است که در آخر اسامی آن ها حرف “د” دیده می شود. برای اینکار باید حتما علامت درصد قبل از حرف مد نظر قرار بگیرد.
تمرین: اطلاعات افرادی را بنویسید که اسم آن ها با “s” شروع شده و با حرف “d” پایان می یابد.
در بالا حالتی را بررسی کردیم که برایمان اصلا اهمیت نداره اسامی چند حرفی هستند فقط اگر شرط ما برای آن ها برقرار بود در خروجی چاپ می شدند.
حال فرض کنید می خواهیم تعداد حروف اسامی برای ما حائز اهمیت باشد فرضا حتما اسامی که نمایش داده می شود پنج حرفی باشند و یا اینکه حرف اول آن ها با “s” شروع بشود اما پنج حرفیم باشند.
ما این کار را می توانیم با خط فاصله یا “_” انجام بدهیم. به این صورت که به ازای هر حرف یک “_” قرار می دهیم. در ادامه ی پست به کد توجه کنید تا بهتر درک کنید.
مساله) اطلاعات افرادی که اسامی آن ها با حرف “s” شروع شده باشد و حتما اسم آن ها پنج حرفی باشد.
پاسخ) قالب کد که تغییری نمی کند اما باید به شرط خواسته شده توجه کنید.
کد:
SELECT * FROM nazer WHERE name LIKE ‘s____’
در کد بالا من حرف “s” را نوشتم و در ادامش 4 تا “_” گذاشتم-اسامی باید پنج حرفی باشند-تا شرط مساله برقرار باشد.
خروجی:
در خروجی بالا می بیند که تمامی اسامی پنج حرفی که با حرف “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’
در این عملگر نیازی به استفاده از علامت درصد نیست و تنها نوشتن حروف کافی است.
خروجی:
در جدولی که به عنوان خروجی نمایش داده شده مشاهده می کنید اسامی هستند بدون در نظر گرفتن موقعیت حرف “S” در کلمه در خروجی چاپ شده اند.
مساله) اطلاعات افرادی که اسامی آن ها با حرف “S” شروع شده است.
با استفاده از عملگر LIKE:
SELECT * FROM nazer WHERE name LIKE ‘S%’
با استفاده از عملگر REGEXP:
SELECT * FROM nazer WHERE name REGEXP ‘^S’
در عملگر REGEXP برای اینکه نشان دهیم حتما حرف باید در ابتدا کلمه باشد از علامت”^” استفاده می کنیم.
خروجی:
مساله: اطلاعات افرادی که در اسامی آن ها حرف آخر “D” باشد.
با استفاده از عملگر LIKE:
SELECT * FROM nazer WHERE name LIKE ‘%D’
با استفاده از عملگر REGEXP:
SELECT * FROM nazer WHERE name REGEXP ‘D$’
خروجی :
مساله) اطلاعات افرادی که در اسامی آن شامل یکی از دو حرف “SA” یا “AH” یا “ZA” باشد.
پاسخ:
برای نوشتن این کد توسط عملگر LIKE بسیار سخت و ناخواناست به همین علت به عملگر REGEXP روی می آوریم.
SELECT * FROM nazer WHERE name REGEXP ‘SA|AH|ZA’
در کد بالا می بینید که برای نشان دادن اجتماع برای داده ها از علامت “|” استفاده شده است.
خروجی:
مساله) اطلاعات افرادی که اخرین حرف اسم آن ها “d” باشه و قبل از آن یکی از سه حرف “N” و “E“و”A” باشد.
پاسخ) برای این کار باید سه حرفی که می خواهیم در قبل از کلمه ی آخر قرار بگیرد در درون براکت قرار دهیم.
در خروجی باید سه کلمه ای که آخر آن ها به صورت “AD” و “ED” و “ND” وجود دارد نمایش داده شود.
کد:
SELECT * FROM nazer WHERE name REGEXP '[NAE]D'
خروجی:
فرض کنید می خواستیم اگر حروف A تا E قبل از کلمه ی ما قبل آخر وجود داشت در خروجی نمایش داده شود برای اینکار لازم نیست تک تک حروف را مانند کد بالا بنویسم بلکه می توانیم از علامت “-“ استفاده کنیم. به کد زیر توجه کنید.
SELECT * FROM nazer WHERE name REGEXP '[A-E]D'
خروجی :
تمرین: با استفاده از عملگر REGEXP اطلاعات افرادی را بدست آورید که:
الف) اول اسم آن ها با “A” شروع شود و یا اسم آن ها شامل حرف “H” شود.
ب) اول اسم آن ها با “S” و اخرین حرف اسمشان با “D” تمام شود.
ج) اسم هایی که شامل حرف “A” باشد و به دنبال آن یکی از حروف “H” و “N” و “R” باشد.
به پایان آموزش عملگر like در MySQL و عملگر REGEXP در MySQL رسیدیم. چنانچه ابهام و اشکال داشتید، در بخش نظرات مطرح نمایید.