با سلام خدمت شما همراهان همیشگی روکسو، در جلسه ی قبل با مفهوم کلی wildcard ها آشنا شدیم و ترکیب آن ها را با اپراتور LIKE بررسی کردیم. در این قسمت قصد داریم مبحث wildcard ها را باز کنیم و به صورت مفصل مورد بررسی قرار دهیم اما ابتدا یادآوری کوتاهی از جلسه ی قبل داریم.
به نظر شما Wildcard چیست؟ به زبان ساده بگویم، wildcard ها معمولا کاراکتر هایی هستند که به جای یک یا چند کاراکتر دیگر قرار می گیرند.
مثلا در ویندوز هنگامی که نام یک فایل را جست و جو می کنید می توانید از کاراکتر * استفاده کنید که به جای هر کاراکتر دیگری قرار می گیرد. مثلا اگر بگوییم ttf.*
یعنی فایل هایی که پسوند ttf دارند و نامشان مهم نیست. اگر بگوییم A*.ttf
یعنی تمام فایل هایی که نامشان با حرف A شروع می شود و پسوند ttf دارند (مثل: A.ttf یا AA.ttf یا Ahugjf.ttf یا A547Uh.ttf و الی آخر). در قسمت بعد بیشتر با Wildcard ها آشنا می شویم.
این ویندوز بود اما در مورد SQL چطور؟ wildcard ها با اپراتور LIKE استفاده می شوند. سپس اپراتور LIKE را در یک عبارت WHERE استفاده می کنیم تا الگوی خاصی را دنبال کنیم. در مثال بالا تمام نام هایی که ذکر شد مانند AA.ttf و A.ttf و ... دارای الگوی خاصی هستند. الگوی آن ها این است که با حرف A شروع می شوند و دارای پسوند ttf هستند. همین کار ها را می توان با پایگاه داده انجام داد. به جدول های زیر توجه کنید:
نماد | توضیحات | مثال |
* | نماینده ی تعداد صفر کاراکتر یا بیشتر | *bl عبارات bl ،black ،blue و blob را پیدا می کند. |
? | نماینده ی یک کاراکتر (هر کاراکتری باشد) | h?t عبارات hat ،hot و hit را پیدا می کند. |
[] | نماینده ی یکی از کاراکتر های داخل براکت | h[oa]t عبارات hat ،hot را پیدا می کند اما hit را نه |
! | نماینده ی هر کاراکتری که داخل براکت نباشد1 | h[!oa]t عبارت hit را پیدا می کند اما hot و hat را نه |
- | نماینده ی محدوده ای از کاراکتر ها | c[a-b]t عبارات cat و cbt را پیدا می کند2 |
# | نماینده ی یک کاراکتر عددی | 2#5 اعداد 205 و 215 و 225 و ... را پیدا می کند. |
1- در زبان های برنامه نویسی علامت ! معمولا شرط را برعکس می کند و معنی NOT می دهد. بنابراین برعکس h[oa]t می شود h[!oa]t که یعنی تمام کاراکتر ها به جز o و a.
2- محدوده ای (range) از کاراکتر ها: وقتی می گوییم [a-b] یعنی تمام کاراکتر هایی که بین a و b قرار دارند که شامل خود a و b نیز می شوند. اگر بگوییم [c-h] یعنی از کاراکتر c الی کاراکتر h (بر اساس ترتیب حروف در الفبای انگلیسی) که می شود کاراکتر های c d e f g h.
نماد | توضیحات | مثال |
% | نماینده ی تعداد صفر کاراکتر یا بیشتر | %bl عبارات bl ،black ،blue و blob را پیدا می کند. |
_ | نماینده ی یک کاراکتر (هر کاراکتری باشد) | h_t عبارات hat ،hot و hit را پیدا می کند. |
[] | نماینده ی یکی از کاراکتر های داخل براکت | h[oa]t عبارات hat ،hot را پیدا می کند اما hit را نه |
^ | نماینده ی هر کاراکتری که داخل براکت نباشد | h[^oa]t عبارت hit را پیدا می کند اما hot و hat را نه |
- | نماینده ی محدوده ای از کاراکتر ها | c[a-b]t عبارات cat و cbt را پیدا می کند |
نکته: شما می توانید wildcard ها را با هم ترکیب کنید. به مثال های زیر دقت کنید:
اپراتور 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 |
در مثال های پایین از انواع wildcard ها استفاده کرده ایم. تفاوت این مثال ها با مثال های جلسه ی قبل این است که سخت تر هستند. از آن جا که در این جلسه به طور خاص به مبحث wildcard ها پرداختیم از مثال های پیچیده تری استفاده می کنیم.
مثال اول - دستور SQL زیر تمام مشتریانی را انتخاب می کند که ستون City شان با رشته ی "ber" شروع شود:
SELECT * FROM Customers WHERE City LIKE 'ber%';
برای اجرای این کد در پایگاه داده ی Northwind روی این لینک کلیک کنید.
مثال دوم - دستور SQL زیر تمام مشتریانی را انتخاب می کند که ستون City شان دارای رشته ی "es" باشد:
SELECT * FROM Customers WHERE City LIKE '%es%';
برای اجرای این کد در پایگاه داده ی Northwind روی این لینک کلیک کنید.
مثال اول - دستور SQL زیر تمام مشتریانی را انتخاب می کند که ستون City شان با هر کاراکتری شروع شود و سپس رشته ی "erlin" را داشته باشد:
SELECT * FROM Customers WHERE City LIKE '_erlin';
برای اجرای این کد در پایگاه داده ی Northwind روی این لینک کلیک کنید.
مثال دوم - دستور SQL زیر تمام مشتریانی را انتخاب می کند که ستون City شان با حرف L شروع شود، سپس هر کاراکتری که می خواهد باشد، سپس حرف n را داشته باشد، سپس هر کاراکتر دیگری که میخواهد باشد و در آخر با رشته ی "on" تمام شود:
SELECT * FROM Customers WHERE City LIKE 'L_n_on';
برای اجرای این کد در پایگاه داده ی Northwind روی این لینک کلیک کنید.
مثال اول - دستور SQL زیر تمام مشتریانی را انتخاب می کند که ستون City شان با حروف b یا s یا p شروع شود:
SELECT * FROM Customers WHERE City LIKE '[bsp]%';
برای اجرای این کد در پایگاه داده ی Northwind روی این لینک کلیک کنید.
مثال دوم - دستور SQL زیر تمام مشتریانی را انتخاب می کند که ستون City شان با حروف a یا b یا c شروع شود (به صورت محدوده ای):
SELECT * FROM Customers WHERE City LIKE '[a-c]%';
برای اجرای این کد در پایگاه داده ی Northwind روی این لینک کلیک کنید.
مثال اول - دستور SQL زیر تمام مشتریانی را انتخاب می کند که ستون City شان با حروف b یا s یا p شروع نشود:
SELECT * FROM Customers WHERE City LIKE '[!bsp]%';
برای اجرای این کد در پایگاه داده ی Northwind روی این لینک کلیک کنید.
نکته: دستور بالا را می توان به این شکل نیز نوشت:
SELECT * FROM Customers WHERE City NOT LIKE '[bsp]%';
اضافه کردن NOT مانند اضافه کردن ! است اما نمی توانید از هر دو به صورت همزمان استفاده کنید.
در این قسمت مبحث wildcard ها را به صورت کامل بررسی کردیم و مثال های متعددی از آن ها را دیدیم. امیدوارم از این قسمت استفاده کرده باشید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.