البحث بالأنماط باستخدام LIKE في SQL

في الدروس السابقة، استخدمنا معامل المساواة = للبحث عن قيم محددة بدقة. لكن ماذا لو أردت البحث عن أسماء تبدأ بحرف معين، أو تحتوي على كلمة معينة؟ هنا يأتي دور LIKE! في هذا الدرس الشامل من سلسلة تعلم لغة SQL باللغة العربية، سنتعلم كيفية استخدام LIKE للبحث بالأنماط (Pattern Matching)، استخدام الرموز البديلة (Wildcards)، والبحث المرن في النصوص.

1. ما هو LIKE في SQL؟

LIKE هو معامل يُستخدم في جملة WHERE للبحث عن نمط معين في عمود نصي. على عكس = الذي يبحث عن مطابقة تامة، LIKE يسمح بالبحث الجزئي والمرن.

البنية الأساسية
SELECT column1, column2
FROM table_name
WHERE column_name LIKE pattern;
تشبيه: فكر في LIKE كمحرك بحث Google - يمكنك البحث عن جزء من الكلمة وسيجد لك جميع النتائج المطابقة.

2. الرموز البديلة (Wildcards) في SQL

لاستخدام LIKE بفعالية، نحتاج إلى فهم الرموز البديلة (Wildcards):

الرمز الوصف مثال يطابق
% يمثل صفر أو أكثر من الأحرف 'أ%' أحمد، أمير، أسامة، أ
_ يمثل حرف واحد فقط 'س_رة' سارة، سيرة، سورة
مهم: الرمز % يمثل أي عدد من الأحرف (حتى صفر)، بينما _ يمثل حرف واحد بالضبط.

3. استخدام % للبحث المرن

لنفترض أن لدينا جدول الطلاب:

جدول students
+----+------------------+----------------------+
| id | name             | email                |
+----+------------------+----------------------+
| 1  | أحمد محمد        | ahmed@gmail.com      |
| 2  | محمد علي         | mohammed@yahoo.com   |
| 3  | فاطمة أحمد       | fatima@gmail.com     |
| 4  | سارة حسن         | sara@outlook.com     |
| 5  | علي أحمد         | ali@gmail.com        |
| 6  | نورة محمد        | noura@hotmail.com    |
+----+------------------+----------------------+
مثال 1: الأسماء التي تبدأ بـ "أحمد"
البحث في البداية
SELECT name FROM students
WHERE name LIKE 'أحمد%';
النتيجة
+------------------+
| name             |
+------------------+
| أحمد محمد        | ✓ يبدأ بـ "أحمد"
+------------------+
1 row in set
مثال 2: الأسماء التي تنتهي بـ "محمد"
البحث في النهاية
SELECT name FROM students
WHERE name LIKE '%محمد';
النتيجة
+------------------+
| name             |
+------------------+
| أحمد محمد        | ✓ ينتهي بـ "محمد"
| نورة محمد        | ✓ ينتهي بـ "محمد"
+------------------+
2 rows in set
مثال 3: الأسماء التي تحتوي على "أحمد" في أي مكان
البحث في أي مكان
SELECT name FROM students
WHERE name LIKE '%أحمد%';
النتيجة
+------------------+
| name             |
+------------------+
| أحمد محمد        | ✓ يحتوي على "أحمد"
| فاطمة أحمد       | ✓ يحتوي على "أحمد"
| علي أحمد         | ✓ يحتوي على "أحمد"
+------------------+
3 rows in set
مثال 4: البريد الإلكتروني من Gmail
البحث عن نطاق معين
SELECT name, email FROM students
WHERE email LIKE '%@gmail.com';
النتيجة
+------------------+----------------------+
| name             | email                |
+------------------+----------------------+
| أحمد محمد        | ahmed@gmail.com      | ✓
| فاطمة أحمد       | fatima@gmail.com     | ✓
| علي أحمد         | ali@gmail.com        | ✓
+------------------+----------------------+
3 rows in set

4. استخدام _ للبحث الدقيق

الرمز _ يمثل حرف واحد بالضبط.

جدول products
+----+------------------+
| id | code             |
+----+------------------+
| 1  | A101             |
| 2  | A102             |
| 3  | A201             |
| 4  | B101             |
| 5  | A1001            |
+----+------------------+
مثال 1: الأكواد التي تبدأ بـ A ثم رقم واحد ثم 01
نمط: A_01
SELECT code FROM products
WHERE code LIKE 'A_01';
النتيجة
+------------------+
| code             |
+------------------+
| A101             | ✓ (A + 1 + 01)
| A201             | ✓ (A + 2 + 01)
+------------------+
2 rows in set

-- لماذا لم يظهر A1001؟
-- لأن _ يمثل حرف واحد فقط، وA1001 يحتوي على 4 أحرف بعد A
مثال 2: دمج % و _
نمط: A_0%
SELECT code FROM products
WHERE code LIKE 'A_0%';
النتيجة
+------------------+
| code             |
+------------------+
| A101             | ✓ (A + 1 + 0 + ...)
| A102             | ✓ (A + 1 + 0 + ...)
| A201             | ✓ (A + 2 + 0 + ...)
| A1001            | ✓ (A + 1 + 0 + ...)
+------------------+
4 rows in set

5. NOT LIKE: البحث العكسي

يمكنك استخدام NOT LIKE لاستبعاد الأنماط المطابقة.

مثال: جميع الطلاب ما عدا Gmail
استبعاد نمط
SELECT name, email FROM students
WHERE email NOT LIKE '%@gmail.com';
النتيجة
+------------------+----------------------+
| name             | email                |
+------------------+----------------------+
| محمد علي         | mohammed@yahoo.com   | ✓
| سارة حسن         | sara@outlook.com     | ✓
| نورة محمد        | noura@hotmail.com    | ✓
+------------------+----------------------+
3 rows in set

6. أمثلة عملية متقدمة

مثال 1: البحث عن أرقام هواتف بنمط معين
أرقام تبدأ بـ 05
SELECT name, phone FROM customers
WHERE phone LIKE '05%';
مثال 2: البحث في أسماء المنتجات
منتجات تحتوي على "لابتوب"
SELECT name, price FROM products
WHERE name LIKE '%لابتوب%';
مثال 3: دمج LIKE مع AND
شرطان معاً
SELECT name, email FROM students
WHERE name LIKE 'أ%' AND email LIKE '%@gmail.com';
مثال 4: دمج LIKE مع OR
بحث متعدد
SELECT name, email FROM students
WHERE email LIKE '%@gmail.com' OR email LIKE '%@yahoo.com';

7. الفرق بين LIKE و =

الميزة = LIKE
نوع المطابقة مطابقة تامة (Exact match) مطابقة نمط (Pattern match)
استخدام Wildcards ❌ لا يدعم ✅ يدعم (%, _)
السرعة ⚡ أسرع 🐢 أبطأ قليلاً
الاستخدام قيم محددة بدقة بحث مرن في النصوص
مقارنة
-- = : مطابقة تامة فقط
WHERE name = 'أحمد'
-- سيجد فقط "أحمد" بالضبط

-- LIKE : مطابقة نمط
WHERE name LIKE '%أحمد%'
-- سيجد: "أحمد"، "أحمد محمد"، "محمد أحمد"، "فاطمة أحمد"

8. نصائح وأفضل الممارسات

1. استخدم = بدلاً من LIKE عندما تعرف القيمة الدقيقة
مقارنة الأداء
-- سيء: بطيء
WHERE email LIKE 'ahmed@gmail.com'

-- جيد: أسرع
WHERE email = 'ahmed@gmail.com'
2. انتبه لحساسية حالة الأحرف (Case Sensitivity)

في معظم أنظمة SQL (MySQL، SQL Server)، LIKE غير حساس لحالة الأحرف بشكل افتراضي:

مثال
-- هذه الثلاثة متساوية في MySQL
WHERE name LIKE 'ahmed%'
WHERE name LIKE 'Ahmed%'
WHERE name LIKE 'AHMED%'
3. استخدم الفهارس (Indexes) بحذر

LIKE 'text%' يمكن أن يستخدم الفهرس، لكن LIKE '%text' أو LIKE '%text%' لا يمكنهما استخدام الفهرس وقد يكونان بطيئين على الجداول الكبيرة.

4. تجنب البحث الزائد
نصيحة
-- سيء: بحث واسع جداً
WHERE name LIKE '%%'  -- سيرجع كل شيء!

-- جيد: محدد
WHERE name LIKE 'أ%'

9. أنماط LIKE الشائعة

النمط الوصف مثال
'A%' يبدأ بـ A Ahmed, Ali, Amira
'%a' ينتهي بـ a Sara, Fatima, Noura
'%test%' يحتوي على test test, testing, latest
'_a%' الحرف الثاني هو a Sara, Hala, Rana
'A___' يبدأ بـ A وطوله 4 أحرف A101, A202, A999
ملخص الدرس
  • LIKE: للبحث بالأنماط في النصوص
  • %: يمثل صفر أو أكثر من الأحرف
  • _: يمثل حرف واحد بالضبط
  • NOT LIKE: لاستبعاد الأنماط
  • الأداء: = أسرع من LIKE عند معرفة القيمة الدقيقة
  • Best Practice: استخدم LIKE فقط عند الحاجة للبحث المرن

الخطوة التالية: معاملات IN و BETWEEN في SQL

أكمل رحلتك التعليمية وانتقل إلى الدرس التالي لتعلم معاملات IN و BETWEEN في وتطوير مهاراتك في قواعد البيانات.

الانتقال إلى الدرس التالي
المحرر الذكي

اكتب الكود وشاهد النتيجة فوراً

جرب الآن مجاناً
قناة ديف عربي

تابع أحدث الدروس والتحديثات مباشرة على واتساب

انضم الآن