با سلام خدمت شما همراهان همیشگی روکسو، اپراتور LIKE در زبان SQL از اپراتور های نسبتا پرکاربرد به شمار می آید. این اپراتور در یک عبارت WHERE استفاده می شود تا در یک ستون به دنبال الگوی خاصی بگردد. اگر متوجه منظور من نشدید نگران نباشید در ادامه متوجه خواهید شد اما قبل از ادامه ی مطلب باید با مفهوم خاصی در دنیای کامپیوتر ها آشنا شویم.
به نظر شما Wildcard چیست؟ به زبان ساده بگویم، wildcard ها معمولا کاراکتر هایی هستند که به جای یک یا چند کاراکتر دیگر قرار می گیرند. مثلا در ویندوز هنگامی که نام یک فایل را جست و جو می کنید می توانید از کاراکتر * استفاده کنید که به جای هر کاراکتر دیگری قرار می گیرد. مثلا اگر بگوییم ttf.*
یعنی فایل هایی که پسوند ttf دارند و نامشان مهم نیست. اگر بگوییم A*.ttf
یعنی تمام فایل هایی که نامشان با حرف A شروع می شود و پسوند ttf دارند (مثل: A.ttf یا AA.ttf یا Ahugjf.ttf یا A547Uh.ttf و الی آخر). تمام نام هایی که ذکر شد مانند AA.ttf و A.ttf و ... دارای الگوی خاصی هستند. الگوی آن ها این است که با حرف A شروع می شوند و دارای پسوند ttf هستند. در قسمت بعد بیشتر با Wildcard ها آشنا می شویم.
معمولا دو نوع wildcard با اپراتور LIKE استفاده می شوند:
نکته: MS Access به جای استفاده از علامت درصد از علامت ستاره (*) و به جای آندرلاین از علامت سوال استفاده می کند.
ساختار کلی اپراتور LIKE به شکل زیر است:
SELECT column1, column2, ... FROM table_name WHERE columnN LIKE pattern;
کلمه ای که در این ساختار جدید است کلمه ی pattern به معنی الگو می باشد که معنی آن بالاتر توضیح داده شد.
نکته: باید بدانید که می توان با استفاده از اپراتور های AND و OR این شرط ها را با هم مخلوط کرد. به مثال های زیر دقت کنید:
اپراتور LIKE | توضیحات - چه چیزی را پیدا می کند؟ |
WHERE CustomerName LIKE 'a%' | هر مقداری که با حرف a شروع شود. |
WHERE CustomerName LIKE '%a' | هر مقداری که با حرف a تمام شود. |
WHERE CustomerName LIKE '%or%' | هر مقداری که رشته ی "or" را در خود داشته باشد (در هر جایش). |
WHERE CustomerName LIKE '_r%' | هر مقداری که حرف r را به عنوان کاراکتر دوم خود داشته باشد. |
WHERE CustomerName LIKE 'a_%_%' | هر مقداری که حداقل 3 کاراکتر داشته و با حرف a شروع شود. |
WHERE ContactName LIKE 'a%o' | هر مقداری که با a شروع شود و با o تمام شود. |
قبل از بررسی مثال ها باید به جدول Customers نگاهی بیندازیم:
Country | PostalCode | City | Address | ContactName | CustomerName | CustomerID |
Germany | 12209 | Berlin | Obere Str. 57 | Maria Anders | Alfreds Futterkiste | 1 |
Mexico | 05021 | México D.F. | Avda. de la Constitución 2222 | Ana Trujillo | Ana Trujillo Emparedados y helados | 2 |
Mexico | 05023 | México D.F. | Mataderos 2312 | Antonio Moreno | Antonio Moreno Taquería | 3 |
UK | WA1 1DP | London | 120 Hanover Sq. | Thomas Hardy | Around the Horn | 4 |
Sweden | S-958 22 | Luleå | Berguvsvägen 8 | Christina Berglund | Berglunds snabbköp | 5 |
مثال اول - دستور SQL زیر تمام مشتریانی را انتخاب می کند که CustomerName شان با حرف a شروع شود:
SELECT * FROM Customers WHERE CustomerName LIKE 'a%';
برای اجرای این دستور در پایگاه داده ی Northwind روی این لینک کلیک کنید.
خروجی این کد شامل چهار ردیف می شود:
Alfreds Futterkiste - Ana Trujillo Emparedados y helados - Antonio Moreno Taquería - Around the Horn
توجه داشته باشید که این اسامی از ستون CustomerName انتخاب شده اند. چرا؟ به خاطر اینکه شرط را روی این ستون پیاده کردیم (WHERE CustomerName LIKE
).
مثال دوم - دستور SQL زیر تمام مشتریانی را انتخاب می کند که CustomerName شان با حرف a تمام شود:
SELECT * FROM Customers WHERE CustomerName LIKE '%a';
برای اجرای این دستور در پایگاه داده ی Northwind روی این لینک کلیک کنید.
خروجی این کد شامل هفت ردیف می شود:
Antonio Moreno Taquería - Centro comercial Moctezuma - Godos Cocina Típica - Que Delícia - Queen Cozinha - Wellington Importadora - Wilman Kala
این نام ها نیز از همان ستون CustomerName انتخاب شده اند (WHERE CustomerName LIKE
)
مثال سوم - دستور SQL زیر تمام مشتریانی را انتخاب می کند که در CustomerName شان رشته ی "or" وجود داشته باشد (هر قسمتی از CustomerName باشد مشکلی ندارد، چه اول و چه وسط و چه آخر و ...):
SELECT * FROM Customers WHERE CustomerName LIKE '%or%';
برای اجرای این دستور در پایگاه داده ی Northwind روی این لینک کلیک کنید.
خروجی این کد شامل یازده ردیف می شود که از ستون CustomerName جدا شده اند (WHERE CustomerName LIKE
):
Antonio Moreno Taquería - Around the Horn - Hungry Coyote Import Store - La corne d'abondance - Lazy K Kountry Store - Morgenstern Gesundkost - North/South - Old World Delicatessen Seven Seas Imports - Tortuga Restaurante - Wellington Importadora
مثال چهارم - دستور SQL زیر تمام مشتریانی را انتخاب می کند که حرف دوم CustomerName شان برابر با حرف r باشد:
SELECT * FROM Customers WHERE CustomerName LIKE '_r%';
برای اجرای این دستور در پایگاه داده ی Northwind روی این لینک کلیک کنید.
دقیقا مانند مثال قبل خروجی این کد شامل یازده ردیف می شود که از ستون CustomerName جدا شده اند (WHERE CustomerName LIKE
):
Around the Horn - Drachenblut Delikatessend - Ernst Handel - Frankenversand - France restauration - Franchi S.p.A. - Great Lakes Food Market - GROSELLA-Restaurante - Princesa Isabel Vinhoss - Tradição Hipermercados - Trail's Head Gourmet Provisioners
مثال پنجم - دستور SQL زیر تمام مشتریانی را انتخاب می کند که CustomerName شان حداقل 3 حرفی بوده و با حرف a شروع شود:
SELECT * FROM Customers WHERE CustomerName LIKE 'a_%_%';
برای اجرای این دستور در پایگاه داده ی Northwind روی این لینک کلیک کنید.
در این مثال نیز خروجی شامل چهار ردیف می شود که از ستون CustomerName جدا شده اند (WHERE CustomerName LIKE
):
Alfreds Futterkiste - Ana Trujillo Emparedados y helados - Antonio Moreno Taquería - Around the Horn
مثال ششم - دستور SQL زیر تمام مشتریانی را انتخاب می کند که ContactName شان با حرف a شروع شده و با حرف o تمام شود:
SELECT * FROM Customers WHERE ContactName LIKE 'a%o';
برای اجرای این دستور در پایگاه داده ی Northwind روی این لینک کلیک کنید.
در این مثال نیز خروجی شامل سه ردیف می شود که از ستون ContactName جدا شده اند (WHERE ContactName LIKE
):
Ana Trujillo - Antonio Moreno - Alejandra Camino
مثال هفتم - دستور SQL زیر تمام مشتریانی را انتخاب می کند که CustomerName شان با حرف a شروع نشده باشد:
SELECT * FROM Customers WHERE CustomerName NOT LIKE 'a%';
برای اجرای این دستور در پایگاه داده ی Northwind روی این لینک کلیک کنید.
خروجی کد بالا شامل 87 ردیف می شود که از ستون CustomerName جدا شده اند. چرا؟ به دلیل چیزی که در شرط نوشته ایم: WHERE CustomerName NOT LIKE
در این جلسه در رابطه با دستور LIKE و ترکیب آن با WHERE صحبت کردیم. همچنین بحث wildcard ها را نیز به صورت جزئی دنبال کردیم و با مفهوم کلی آن ها آشنا شدیم. در آخر نیز با مثال های متعدد مفهوم اجرایی آن را جا انداختیم تا جای شک و اشتباهات ریز باقی نماند. امیدوارم این قسمت نیز مورد قبول شما قرار گرفته باشد.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.