كيفية استخدام محارف البدل Wildcards في لغة الاستعلام البنيوية SQL
أهلاً بك أيها المبرمج! اليوم سنتعلم شيئاً مفيداً جداً في SQL: محارف البدل أو Wildcards. هذه الأداة هتخليك تبحث عن أنماط معينة في النصوص، مش بس تطابق تام. يعني لو مش متأكد من كل حروف الكلمة اللي بتبحث عنها، Wildcards هي الحل!
ما هي محارف البدل (Wildcards) ولماذا نحتاجها؟
ببساطة، محارف البدل هي رموز خاصة بنستخدمها مع جملة LIKE في SQL عشان نبحث عن سلاسل نصية (strings) بتطابق نمط معين، مش قيمة دقيقة. تخيل إنك عايز تلاقي كل العملاء اللي اسمهم بيبدأ بحرف "أ"، أو كل المنتجات اللي في اسمها كلمة "جديد". هنا بيجي دور Wildcards.
ملاحظة مهمة: محارف البدل دي بتشتغل حصرياً مع معامل
LIKEفي جملةWHERE.
1. علامة النسبة المئوية (%) - الصديق المرن
علامة النسبة المئوية (%) هي أشهر وأكثر محارف البدل استخداماً. بتطابق صفر أو أكثر من الأحرف. يعني ممكن تكون مش موجودة خالص، أو حرف واحد، أو مليون حرف. مرنة جداً!
أمثلة على استخدام %:
'علي%': بيبحث عن أي اسم يبدأ بـ "علي". (مثال: علي، علياء، عليان).'%محمد': بيبحث عن أي اسم ينتهي بـ "محمد". (مثال: محمود محمد، أحمد محمد).'%المركز%': بيبحث عن أي نص يحتوي على كلمة "المركز" في أي مكان. (مثال: المركز الرئيسي، فرع المركز).'ا%ا': بيبحث عن أي نص يبدأ بحرف "ا" وينتهي بحرف "ا". (مثال: اسماء، ايمان).
مثال عملي: لو عندك جدول العملاء وعايز تلاقي كل العملاء اللي اسمهم بيبدأ بـ "أحمد":
SELECT *
FROM العملاء
WHERE اسم_العميل LIKE 'أحمد%';
2. علامة الشرطة السفلية (_) - المطابقة الدقيقة لحرف واحد
علامة الشرطة السفلية (_) بتطابق حرف واحد بالضبط. يعني لو حطيتها، لازم يكون فيه حرف مكانها. لا أقل ولا أكثر.
أمثلة على استخدام _:
'ك_ب': بيبحث عن كلمة مكونة من 3 حروف تبدأ بـ "ك" وتنتهي بـ "ب" والحرف اللي في النص أي حاجة. (مثال: كلب، كتب، كعب).'م____د': بيبحث عن كلمة تبدأ بـ "م" وتنتهي بـ "د" وبينهم 4 حروف.
مثال عملي: لو عايز تلاقي كل المنتجات اللي الكود بتاعها مكون من 5 حروف، بيبدأ بـ "P" وينتهي بـ "X" وفي النص 3 حروف أي حاجة:
SELECT اسم_المنتج, كود_المنتج
FROM المنتجات
WHERE كود_المنتج LIKE 'P___X';
3. الأقواس المربعة ([]) - لمجموعة محددة من الأحرف (SQL Server, MS Access)
محرف البدل [] بيسمح لك تحدد مجموعة من الأحرف، وبيطابق أي حرف واحد من المجموعة دي. دي مش موجودة في كل قواعد البيانات (مثلاً MySQL و PostgreSQL بيستخدموا REGEXP أو SIMILAR TO لحاجات مشابهة)، لكنها شائعة في SQL Server و MS Access.
أمثلة على استخدام []:
'[ABC]ات': بيطابق "بات"، "تات"، "ثات". (أي حرف من A أو B أو C، ثم "ات").'[أ-ي]ل': بيطابق أي كلمة حرفها الأول حرف عربي، ثم حرف "ل". (مثال: فل، مل، حل).'[^ABC]ات': بيطابق أي كلمة تنتهي بـ "ات" لكن حرفها الأول مش A أو B أو C. (^داخل الأقواس بتعني "ليس من ضمن هذه المجموعة").
مثال عملي (في SQL Server/MS Access): لو عايز تلاقي كل الموظفين اللي اسمهم الأول بيبدأ بحرف من الحروف (أ، ب، ت):
SELECT اسم_الموظف_الأول, اسم_الموظف_الأخير
FROM الموظفين
WHERE اسم_الموظف_الأول LIKE '[أبت]%';
دمج محارف البدل
تقدر تدمج أكتر من محرف بدل مع بعض عشان تعمل أنماط بحث معقدة أكتر.
مثال: لو عايز تلاقي كل المنتجات اللي اسمها بيبدأ بحرف "س"، والحرف الثالث "م"، وفي أي مكان بعد كده فيه كلمة "جديد":
SELECT اسم_المنتج
FROM المنتجات
WHERE اسم_المنتج LIKE 'س_م%جديد%';
الشرح: س (حرف السين) + _ (أي حرف واحد) + م (حرف الميم) + % (صفر أو أكثر من أي أحرف) + جديد (كلمة جديد) + % (صفر أو أكثر من أي أحرف).
الهروب من محارف البدل (Escaping Wildcards)
طيب، لو عايز تبحث عن حرف _ أو % بالذات في النص؟ يعني مش عايزهم يشتغلوا كـ Wildcards. هنا بنستخدم جملة ESCAPE.
بتحدد حرف معين (غالباً بيكون \ أو #) كحرف هروب، وتحطه قبل الـ Wildcard اللي عايز تبحث عنه كحرف عادي.
مثال: لو عندك منتج اسمه "خصم 20%" وعايز تبحث عنه بالظبط:
SELECT اسم_المنتج
FROM المنتجات
WHERE اسم_المنتج LIKE 'خصم 20\%' ESCAPE '\';
هنا، \ هو حرف الهروب، ولما بييجي قبل %، SQL بتعرف إنها لازم تتعامل مع % كحرف عادي، مش كـ Wildcard.
خلاصة
محارف البدل أداة قوية جداً في SQL بتوفر لك مرونة كبيرة في البحث عن البيانات. إتقانها هيخليك تستخرج المعلومات اللي محتاجها بالظبط، حتى لو مكنتش عارف كل تفاصيلها. جرب الأمثلة دي بنفسك على قاعدة بياناتك عشان تفهمها أكتر!