0Pricing
SQL Interview Prep · درس

LIKE والرموز البديلة وهروب المحارف

مطابقة الأنماط، والفرق بين علامة النسبة المئوية والشرطة السفلية، وهروب محارف الرموز البديلة الحرفية

LIKE والرموز البديلة وهروب المحارف درس مجاني في SQL Interview Prep على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Interview Prep، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Interview Prep 4 دروس في المجموع.

مطابقة الأنماط تحت تدقيق المقابلات

يبدو LIKE بسيطًا، لكنه يخفي ثلاثة أفخاخ كلاسيكية في المقابلات: الخلط بين % و_، ونسيان أن علامة النسبة المئوية أو الشرطة السفلية الحرفية في البيانات تحتاج إلى تهريب، ومفاجأة حساسية حالة الأحرف التي تختلف باختلاف قاعدة البيانات.

يتعمق هذا الدرس في محرفي البدل، وعبارة ESCAPE، والقواعد التي تختلف بين اللهجات والتي سيفحصها المحاور للتمييز بين المبتدئين ومن أطلقوا ميزات بحث حقيقية.

محرفا البدل

يحتوي LIKE على محرفي بدل فقط:

  • يطابق % صفرًا من الأحرف أو أكثر
  • يطابق _ حرفًا واحدًا بالضبط

لذلك يطابق 'a%' أي شيء يبدأ بالحرف a، بينما يطابق 'a_' سلسلة من حرفين تبدأ بالحرف a. والخلط بينهما هو الخطأ الأول في استخدام LIKE.

SELECT *
FROM customers
WHERE name LIKE 'A%';
-- every name beginning with A

علامة % في أي موضع

ضع % في الموضع المناسب للتحكم في مكان تثبيت المطابقة:

  • تنتهي '%son' بـ son‏ (Johnson وMason)
  • تحتوي '%mary%' على mary في أي موضع
  • تبدأ 'J%n' بـ J وتنتهي بـ n

تطابق '%' المجردة كل صف غير NULL. ولا تطابق قيم NULL أي نمط LIKE، بما في ذلك '%'.

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

الشرطة السفلية للطول الثابت

تطابق _ حرفًا واحدًا عشوائيًا، وهي مفيدة للرموز ذات الطول الثابت. تطابق 'A__' ثلاثة أحرف بالضبط تبدأ بـ A، لا أكثر ولا أقل.

يختبر المحاورون ذلك باستخدام رموز المنتجات أو رموز البلدان. فالمرشح الذي يكتب 'A%' عند طلب رمز من ثلاثة أحرف يبدأ بـ A يكون مخطئًا بدقة، إذ سيعيد أي شيء يبدأ بـ A.

SELECT *
FROM products
WHERE sku LIKE 'A__';
-- A followed by exactly two more characters

عندما تظهر % و_ في البيانات

ماذا لو احتجت إلى العثور على قيم تحتوي حرفيًا على علامة النسبة المئوية، مثل تسمية الخصم '50% off'؟ ستفشل كتابة LIKE '%50%%'، لأن علامة % الأخيرة تُعامل كمحرف بدل، لا كحرف حرفي.

يجب أن تخبر SQL بأن محرفًا محددًا حرفي. وهذا هو الغرض من عبارة ESCAPE.

عبارة ESCAPE

صرّح بمحرف هروب باستخدام ESCAPE، ثم ضع هذا المحرف قبل أي محرف بدل تريد معاملته حرفيًا. هنا، ! هو محرف الهروب، ولذلك تعني !% علامة نسبة مئوية حرفية.

يعثر هذا على القيم التي تحتوي على النص الحرفي 50% في أي موضع. محرف الهروب اختياري؛ اختر محرفًا لا يظهر في نص البحث.

SELECT *
FROM promos
WHERE label LIKE '%50!%%' ESCAPE '!';
-- matches a literal '50%' anywhere in label

تهريب الشرطة السفلية الحرفية

تختبئ الشرطات السفلية في أسماء المستخدمين والمعرّفات، وتطابق _ غير المُهَرَّبة أي حرف بصمت. للعثور على عناوين بريد إلكتروني تبدأ حرفيًا بـ 'a_b'، يجب تهريب الشرطة السفلية.

من دون التهريب، ستطابق 'a_b%' أيضًا 'axb' و'a9b' وما شابه ذلك. يصل هذا الخطأ إلى بيئة الإنتاج باستمرار لأن الاستعلام غير المُهَرَّب لا يزال يعيد صفوفًا تبدو معقولة.

SELECT *
FROM users
WHERE handle LIKE 'a!_b%' ESCAPE '!';
-- handle starting with the literal text a_b

تختلف حساسية حالة الأحرف باختلاف قاعدة البيانات

تعتمد حساسية LIKE لحالة الأحرف على المحرك وترتيب الأحرف:

  • في PostgreSQL: تكون LIKE حساسة لحالة الأحرف؛ استخدم ILIKE للتجاهل
  • في MySQL: يعتمد ذلك على ترتيب أحرف العمود، وغالبًا ما تكون غير حساسة لحالة الأحرف افتراضيًا
  • في SQL Server: يعتمد ذلك على إعداد ترتيب الأحرف

النهج الصريح القابل للنقل هو تحويل طرفي المقارنة إلى أحرف صغيرة.

SELECT *
FROM customers
WHERE LOWER(name) LIKE 'a%';

تكلفة الأداء الخفية

لا يستطيع محرف بدل في البداية مثل '%son' استخدام فهرس B-tree عادي، لأن الفهرس مرتب حسب البادئة ولأن بداية النمط غير مثبتة. لذلك يجب على المحرك فحص كل صف.

يمكن لـ 'son%'، أي محرف البدل اللاحق ذي البادئة المثبتة، استخدام فهرس. يحب المحاورون السؤال عن سبب بطء بحث LIKE؛ وعادةً ما تكون علامة % في البداية هي الإجابة.

-- index-friendly (anchored prefix):
WHERE name LIKE 'Smi%'
-- forces a scan (leading wildcard):
WHERE name LIKE '%mith'

ما بعد LIKE

عندما لا يكون LIKE كافيًا، اذكر البدائل لإظهار عمق معرفتك:

  • ‏SIMILAR TO والتعبيرات النمطية POSIX‏ (~ و~*) في PostgreSQL للتعبيرات النمطية الحقيقية
  • فهارس البحث في النص الكامل لمجموعات النصوص الحرة الكبيرة
  • فهارس ثلاثيات الأحرف (pg_trgm) لتسريع عمليات البحث التي تبدأ بمحرف بدل

تُظهر تسمية هذه البدائل أنك تعرف أن LIKE هو الحد الأدنى، وليس الحد الأقصى، للبحث النصي.

إنشاء أنماط LIKE بأمان من إدخال المستخدم

يسأل القائمون بالمقابلة كثيرًا: كيف تبحثون عن مصطلح أدخله المستخدم باستخدام LIKE دون التسبب في مشكلات؟ هناك خطراَن ينبغي ذكرهما:

  • الحقن — مرّروا القيمة كمعامل، ولا تدمجوا الإدخال الخام مطلقًا في سلسلة SQL.
  • محارف البدل غير المُهَرَّبة — إذا احتوى الإدخال نفسه على % أو _، فاهربوا منهما حتى تتم مطابقتهما حرفيًا.

مرّروا المعامل، ثم أضيفوا محارف البدل الخاصة بكم في الاستعلام.

-- $1 is bound as a parameter; wildcards are added in SQL
SELECT *
FROM products
WHERE name LIKE '%' || replace(replace($1, '_', '\_'), '%', '\%') || '%' ESCAPE '\';

تحقق سريع

تذكّر الفرق بين محرفي البدل.

خلاصة

أهم النقاط:

  • يطابق % صفرًا من الأحرف أو أكثر؛ ويطابق _ حرفًا واحدًا بالضبط
  • لمطابقة % أو _ حرفيًا في البيانات، صرّح بمحرف ESCAPE وضعه قبل محرف البدل
  • تختلف حساسية حالة الأحرف باختلاف المحرك؛ ويُعد استخدام LOWER() على الطرفين إصلاحًا قابلًا للنقل (يحتوي Postgres على ILIKE)
  • يفرض محرف البدل في البداية فحصًا كاملًا؛ أما البادئة المثبتة فيمكنها استخدام فهرس

تُعد الشرطة السفلية غير المُهَرَّبة خطأً صامتًا: فهي لا تزال تعيد صفوفًا تبدو معقولة.

الأسئلة الشائعة

هل درس «LIKE والرموز البديلة وهروب المحارف» مجاني؟

نعم — نص درس «LIKE والرموز البديلة وهروب المحارف» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Interview Prep، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Interview Prep 4 دروس في المجموع.

ماذا ستتعلم في «LIKE والرموز البديلة وهروب المحارف»؟

مطابقة الأنماط، والفرق بين علامة النسبة المئوية والشرطة السفلية، وهروب محارف الرموز البديلة الحرفية تتمرن على SQL Interview Prep مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ SQL Interview Prep؟

لا تُشترط خبرة سابقة. SQL Interview Prep على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «LIKE والرموز البديلة وهروب المحارف»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس SQL Interview Prep هذا؟

نعم. كل درس في SQL Interview Prep يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أسبقية AND وOR ووضع الأقواس
  2. BETWEEN وIN والحدود الشاملة
  3. LIKE والرموز البديلة وهروب المحارف
  4. التصفية حسب القيم المحسوبة
← العودة إلى SQL Interview Prep