TOP

SQL-الدرس 5. أحرف البدل والتعبيرات العادية (LIKE)

في كثير من الأحيان، لتصفية البيانات، سنحتاج إلى أخذ العينات ليس حسب المطابقة الدقيقة للشرط، ولكن بقيمة تقريبية. أي عندما نقوم، على سبيل المثال، بالبحث عن منتج يتطابق اسمه مع نمط معين (تعبير عادي) أو يحتوي على رموز أو كلمات معينة. لمثل هذه الأغراض، يوجد عامل التشغيل LIKE في SQL، والذي يبحث عن القيم التقريبية. لإنشاء مثل هذا النمط، يتم استخدام الأحرف الأولية (أحرف خاصة، للبحث عن جزء من القيمة)، وهي: "علامة النسبة المئوية" (٪) أو العلامة النجمية (*)، أو "تسطير أسفل السطر" (_) أو "علامة الاستفهام" (؟) ، "بين قوسين مربعين" ([ ]).


1. علامة النسبة المئوية للأحرف الأولية (%) أو العلامة النجمية (*)

دعونا، على سبيل المثال، نحدد السجلات من الجدول الخاص بنا والتي تتعلق فقط بالمنتجات التي تحتوي على كلمة Skis في أسمائها. للقيام بذلك، سوف نقوم بإنشاء قالب مناسب:

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product LIKE '*Skis*'

كما ترون، حدد نظام إدارة قواعد البيانات (DBMS) فقط تلك السجلات التي يحتوي فيها عمود المنتج على منتجات تحتوي على كلمة Skis.

يستخدم هذا المثال الحرف التعريفي للعلامة النجمية (*) لأن MS Access لا يدعم "علامة النسبة المئوية" (%) لعامل التشغيل LIKE.

2. الشرطة السفلية (_) أو علامة الاستفهام (؟)

يتم استخدام الشرطة السفلية أو علامة الاستفهام لاستبدال حرف واحد في الكلمة. لنستبدل جميع حروف العلة في كلمة Bikes بـ "علامة الاستفهام" (؟) ونرى النتيجة:

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product LIKE 'B?k?s'
لقد استخدمنا الحرف التعريفي "علامة الاستفهام" (؟) لأن MS Access لا يدعم "الشرطة السفلية" (_) لعامل التشغيل LIKE.

3. الأقواس المربعة للأحرف الخاصة ([ ])

يتم استخدام الحرف الأولي ذو القوس المربع ([ ]) لتحديد مجموعة من الأحرف في نفس الوقت للبحث عنها.

SELECT * 
FROM Sumproduct 
WHERE City LIKE '[TN]*'

في المثال أعلاه، قمنا بتحديد السجلات التي تبدأ فيها أسماء المدن بالحرف T أو N في الحقل City.

الحرف الأولي ذو القوس المربع ([ ]) غير مدعوم باللهجة MySQL.

أيضًا، في هذه الحالة، يمكننا استخدام حرف آخر يقوم بالعكس. دعونا نضيف علامة تعجب (!) إلى تعبيرنا العادي، والذي سيعني "غير متساوٍ" (بالنسبة لـ MS Access) أو علامة الطاقة (^) (لأنظمة إدارة قواعد البيانات الأخرى).

SELECT * 
FROM Sumproduct 
WHERE City LIKE '[!TN]*'

أي أن الاستعلام الأخير الذي أنشأناه سيتم قراءته على النحو التالي: حدد كافة الأعمدة من جدول Sumproduct، وفقط تلك السجلات التي لا تبدأ فيها أسماء المدن في الحقل City بالحرف T أو N. بالإضافة إلى ذلك، نلاحظ أن تتوافق مجموعة الأحرف الموجودة في الحرف "الأقواس المربعة" مع موضع واحد فقط في النص.

يمكننا الحصول على نتيجة مماثلة إذا استخدمنا عامل التشغيل NOT الذي نعرفه بالفعل، ولكن مع علامة التعجب (!) سيكون السجل أقصر.