المعامل LIKE والأنماط في SQL

يُستخدم المعامل LIKE في SQL للبحث عن نصوص تطابق نمطاً معيّناً داخل عمود نصي، بدلاً من البحث عن قيمة محددة بالكامل. وهو ضروري لميزات مثل البحث الجزئي عن الأسماء أو تصفية النطاقات البريدية. يعتمد LIKE على رمزين خاصين: علامة النسبة المئوية % التي تمثّل أي عدد من الأحرف (بما في ذلك صفر)، والشرطة السفلية _ التي تمثّل حرفاً واحداً بالضبط.

البحث بالبادئة واللاحقة

باستخدام % نستطيع البحث عن النصوص التي تبدأ أو تنتهي بنص معيّن:

-- يبدأ بكلمة أحمد
SELECT * FROM users WHERE name LIKE 'أحمد%';

-- ينتهي بكلمة محمد
SELECT * FROM users WHERE name LIKE '%محمد';

-- يحتوي كلمة علي في أي موضع
SELECT * FROM users WHERE name LIKE '%علي%';

الشرطة السفلية للحرف الواحد

تمثّل الشرطة السفلية _ حرفاً واحداً بالضبط، وهي مفيدة عندما نعرف طول النص أو موضع حرف غير معروف:

-- اسم من أربعة أحرف يبدأ بحرف A
SELECT * FROM users WHERE code LIKE 'A___';

هنا يطابق النمط أي رمز مكوّن من أربعة أحرف، أوّلها A والثلاثة الباقية أي أحرف.

النفي والحساسية لحالة الأحرف

يمكن استخدام NOT LIKE لإرجاع النصوص التي لا تطابق النمط. أما حساسية حالة الأحرف فتختلف بين الأنظمة: ففي MySQL غالباً ما يكون LIKE غير حساس لحالة الأحرف افتراضياً، بينما يكون حساساً في PostgreSQL الذي يوفّر ILIKE للبحث غير الحسّاس.

SELECT * FROM products WHERE name NOT LIKE '%قديم%';

أخطاء شائعة

  • الخلط بين % التي تمثّل أي عدد من الأحرف و_ التي تمثّل حرفاً واحداً فقط.
  • افتراض أن LIKE غير حسّاس لحالة الأحرف في كل الأنظمة دون التحقق.
  • استخدام LIKE ‘%نص%’ على جداول ضخمة دون فهرسة مناسبة، ما يبطئ الأداء.

تمرين محلول

المطلوب: اعرض المستخدمين الذين تنتهي عناوين بريدهم بـ gmail.com.

SELECT * FROM users
WHERE email LIKE '%@gmail.com';

استخدمنا % قبل @gmail.com لمطابقة أي اسم مستخدم يسبق النطاق، فيظهر كل من يستعمل بريد Gmail.

الخلاصة

المعامل LIKE أداة قوية للبحث بالأنماط في النصوص عبر الرمزين % و_. وفهم الفرق بينهما، والانتباه لحساسية حالة الأحرف وأثر الأداء على الجداول الكبيرة، يمكّنك من بناء ميزات بحث مرنة ودقيقة في تطبيقاتك.