SQL - کار با LIKE در دیتابیس
توی این مقاله شما یاد میگیرین چطور از LIKE
برای پیدا کردن ردیف هایی که شامل پترن خاصی هستند، استفاده کنید. همونطور که حدس میزنین از LIKE
توی WHERE
استفاده میکنیم تا اطلاعات رو فیلتر کنیم.
مقدمه ای بر LIKE
فرض کنین میخوایم یه مشتری رو پیدا کنیم ولی دقیقا یادمون نمیاد اسمش چیه. فقط میدونیم اسمش با یه چیزی مثل Jan
شروع میشه. رفتن توی جدول مشتری ها و بررسی کردن تک تکشون وقت زیادی میگیره ( چون تعدادشون زیاده ).
پس ما نیاز داریم فقط کاربرایی بهمون نشون داده بشه که اسمشون با Jan
شروع میشه. توی این شرایط از LIKE
استفاده میکنیم و دستورش به شکل زیره:
SELECT
first_name,
last_name
FROM
customer
WHERE
first_name LIKE 'Jen%';
و در نتیجه:
همونطور که میبینین، توی WHERE
عبارت های خاصی بکار رفته.
first_name
: که اسم ستونی هست که میخوایم برطبق اون فیلتر کنیمLIKE
: که داریم در بارش میخونیم وoperator
ما هست'Jen%'
که پترن مورد جستجوی ما هست
این دستور وقتی به ما True
میده که ستون first_name
با Jan
شروع شده باشه و در ادامش هر چی میتونه باشه ( یا اصلا چیزی نباشه ).
توی LIKE
میتونیم پترن مورد نظرمون رو بسازیم و دنبالش بگردیم. عبارت %
به ما میگه کجاش دیگه مهم نیست. یعنی وقتی %
میذاریم یعنی مهم نیست. مثلا توی دستور بالا منظورمون از Jan%
اینه که با Jan
شروع بشه و ادامش دیگه مهم نیست. ( فقط با Jan
شروع بشه )
همچنین اگه تعداد حرف برامون مهم باشه، میتونیم از _
استفاده کنیم. به تعدادی که میذاریم، پترن میسازیم با اون تعداد حرف. مثلا _Jan%
یعنی قبل Jan فقط 1
حرف باشه و بعد Jan
و در ادامه هرچی که باشه مهم نیست.
پس برای ساخت پترن از موارد زیر استفاده میکنیم:
%
: هر دنباله دلخواه میتونه قرار بگیره_
: به تعداد، حرف میتونه قرار بگیره
نحوه استفاده از LIKE
به شکل زیر است:
value LIKE pattern
عبارت بالا True
برمیگردونه اگه مقدار value
مطابق پترن باشه.
برای مواردی که نیاز داریم طبق پترن نباشه مثل زیر عمل میکنیم:
value NOT LIKE pattern
این عبارت، وقتی True
برمیگردونه که Value
مطابق پترن نباشه.
مثال هایی از LIKE
اول بیاین چنتا پترن رو با هم بررسی کنیم. به پترن های زیر دقت کنین:
SELECT
'foo' LIKE 'foo', -- true
'foo' LIKE 'f%', -- true
'foo' LIKE '_o_', -- true
'bar' LIKE 'b_'; -- false
توضیح این پترن ها به ترتیب:
- توی مثال اول، پترن ما دقیقا یک کلمست (
foo
) پس درواقعLIKE
مثل برابری (=
) عمل میکنه. - مثال دوم
True
برمیگردونه چون پترن ما میگه تمامی مقادیری که باf
شروع بشه. - مثال سوم
True
برمیگردونه چون پترن میگه تمامی کلماتی که شامل3
حرف باشن، یک حرفo
وسطشون باشه و چپ و راست ( فقط یک حرف ) و مهم نیست چی باشه ( فقط1
حرف حتما سمت چپ و1
حرف سمت راست داشته باشه ) - مثال چهارم
False
برمیگردونه چون پترن میگه یک حرفb
در ابتدا باشه و در ادامه فقط1
حرف باشه. ( کلمهbar
، دو حرف در ادامه b داره ).
بیاین چنتا مثال ببینیم.
مثال زیر تمامی مشتری هایی که اسمشون شامل er
باشه رو بهمون نشون میده ( فرق نمیکنه این er
کجاست، اول، وسط یا آخر ... )
SELECT
first_name,
last_name
FROM
customer
WHERE
first_name LIKE '%er%'
ORDER BY
first_name;
و در نتیجه :
توی مثال بعدی، ما دنبال مشتری هایی میگردیم که اسمشون با 1
حرف ( هر حرفی ) شروع بشه و در ادامه her
داشته باشه و بعد هرچی داشت مهم نیست:
SELECT
first_name,
last_name
FROM
customer
WHERE
first_name LIKE '_her%'
ORDER BY
first_name;
و در نتیجه:
برای توضیح بیشتر پترن _her%
:
- با یک حرف شروع بشه (
_
) - بعدش رشته
her
قرار داشته باشه - و در ادامش هر چی به هر تعدادی میتونه باشه (
%
)
توی مثال بعدی، ما میخوایم تمام کسایی رو که اسمشون با Jen
شروع نمیشه پیدا کنیم:
SELECT
first_name,
last_name
FROM
customer
WHERE
first_name NOT LIKE 'Jen%'
ORDER BY
first_name
و در نتیجه:
توی این مقاله، شما یاد گرفتین چطور از LIKE
برای فیلتر کردن اطلاعاتی که از پترن خاصی پیروی میکنن، استفاده کنین.