اپراتور LIKE و Wildcard در زبان SQL

09 اسفند 1397
درسنامه درس 11 از سری آموزش زبان SQL
sql-language-like-wildcard-where

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

مفهوم wildcard

به نظر شما Wildcard چیست؟ به زبان ساده بگویم، wildcard ها معمولا کاراکتر هایی هستند که به جای یک یا چند کاراکتر دیگر قرار می گیرند. مثلا در ویندوز هنگامی که نام یک فایل را جست و جو می کنید می توانید از کاراکتر * استفاده کنید که به جای هر کاراکتر دیگری قرار می گیرد. مثلا اگر بگوییم ttf.* یعنی فایل هایی که پسوند ttf دارند و نامشان مهم نیست. اگر بگوییم A*.ttf یعنی تمام فایل هایی که نامشان با حرف A شروع می شود و پسوند ttf دارند (مثل: A.ttf یا AA.ttf یا Ahugjf.ttf یا A547Uh.ttf و الی آخر). تمام نام هایی که ذکر شد مانند AA.ttf و A.ttf و ... دارای الگوی خاصی هستند. الگوی آن ها این است که با حرف A شروع می شوند و دارای پسوند ttf هستند. در قسمت بعد بیشتر با Wildcard ها آشنا می شویم.

اپراتور LIKE و wildard ها

معمولا دو نوع 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

مثال های کار با اپراتور LIKE

مثال اول - دستور 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 ها را نیز به صورت جزئی دنبال کردیم و با مفهوم کلی آن ها آشنا شدیم. در آخر نیز با مثال های متعدد مفهوم اجرایی آن را جا انداختیم تا جای شک و اشتباهات ریز باقی نماند. امیدوارم این قسمت نیز مورد قبول شما قرار گرفته باشد.

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

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.