SQL - البحث في الأعمدة النصية

SQLالبحث في الأعمدة النصية

  • العامل LIKE
  • الأحرف و الرموز التي تستخدم في كتابة الأنماط
  • تجهيز قاعدة البيانات التي سنطبق عليها
  • أمثلة شاملة على كتابة الأنماط

العامل LIKE

العامل LIKE يتيح البحث في الحقول النصية باستخدام التعابير النمطية ( Regular Expressions ).


طريقة استخدامه

SELECT column1, column2, ...
FROM table_name
WHERE column_name LIKE pattern;
  • مكان الكلمة column_name نضع إسم العمود المراد البحث فيه عن نص محدد.
  • مكان الكلمة pattern نضع نص يقال له نمط البحث ( Search Pattern ) لأنه يحتوي على رموز تمثل الطريقة التي سيتم فيها البحث.

الأحرف و الرموز التي تستخدم في كتابة الأنماط

الأحرف و الرموز التي نضعها في أي نمط يقال لها Wildcards.

قد تختلف قليلاً الأحرف و الرموز التي نضعها في الأنماط من قاعدة بيانات لأخرى و لكن أغلبها متشابه.

في الجدول التالي وضعنا الأحرف و الرموز التي تستخدم في كتابة الأنماط مع تحديد قواعد البيانات التي تستخدم فيها.

الرمز و استخدامه
% يستخدم في حال عدم الإكتراث ما إذا كان يوجد شيء أم لا.
بالنسبة لقواعد البيانات التي يمكن استخدامه فيها فهي MySQL / SQL Server / Oracle.

مثال: 'Hello%'
هذا النمط يقصد منه أننا نريد أن يكون الحقل النصي يبدأ بكلمة Hello و لا يهم إن كان يوجد شيء بعدها أم لا.
* يستخدم في حال عدم الإكتراث ما إذا كان يوجد شيء أم لا.
بالنسبة لقواعد البيانات التي يمكن استخدامه فيها فهي Access.

مثال: 'Hello*'
هذا النمط يقصد منه أننا نريد أن يكون الحقل النصي يبدأ بكلمة Hello و لا يهم إن كان يوجد شيء بعدها أم لا.
_ يستخدم للإشارة إلى وجوب وجود أي حرف في المكان الذي يتم وضعه.
بالنسبة لقواعد البيانات التي يمكن استخدامه فيها فهي MySQL / SQL Server / Oracle.

مثال: 'm_n'
هذا النمط يقصد منه أننا نريد أن يكون الحقل النصي يبدأ بحرف m و يوجد حرفين بعده فقط مثل men - man - msn.
? يستخدم للإشارة إلى وجوب وجود أي حرف في المكان الذي يتم وضعه.
بالنسبة لقواعد البيانات التي يمكن استخدامه فيها فهي Access.

مثال: 'm?n'
هذا النمط يقصد منه أننا نريد أن يكون الحقل النصي يبدأ بحرف m و يوجد حرفين بعده فقط مثل men - man - msn.

تجهيز قاعدة البيانات التي سنطبق عليها

قم بتنفيذ الإستعلام التالي حتى تنشئ قاعدة بيانات جديدة إسمها harmash و تنشئ فيها جدول إسمه users يحتوي على بيانات 10 مستخدمين.

الإستعلام

-- سيتم حذفها harmash في حال كان يوجد بالأساس قاعدة بيانات إسمها
DROP DATABASE IF EXISTS harmash;

-- harmash هنا قمنا بإنشاء قاعدة بيانات جديدة إسمها
CREATE DATABASE harmash;

-- harmash هنا قمنا بتحديد أن أي إستعلام جديد سيتم تنفيذه على قاعدة البيانات
USE harmash;

-- يتألف من 4 أعمدة users هنا قمنا بإنشاء جدول جديد إسمه
-- لأننا قمنا بتحديدها قبل إستدعاء هذا الأمر harmash سيتم إنشاء هذا الجدول بداخل قاعدة البيانات
CREATE TABLE users (
    id         INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    first_name VARCHAR(50),
    last_name  VARCHAR(50),
    country    VARCHAR(50)
);

-- هنا قمنا بإضافة 10 أسطر في الجدول, أي أضفنا معلومات 10 مستخدمين
-- لاحظ أننا لم نحدد أسماء الأعمدة التي سنضع فيها البيانات لأننا قمنا بملئ جميع المعلومات
-- في البداية هو حتى يكون عدد القيم الموضوعة يساوي عدد أعمدة الجدول null سبب وضع الكلمة
-- ستقوم قاعدة البيانات بوضع رقم تعرفة مختلف لكل سطر null مكان الكلمة
INSERT INTO users VALUES (null, "Rami", "Masri", "Lebanon");
INSERT INTO users VALUES (null, "Ahmad", "Naji", "Syria");
INSERT INTO users VALUES (null, "Hanan", "Mostafa", "KSA");
INSERT INTO users VALUES (null, "Saly", "Jawhar", "Lebanon");
INSERT INTO users VALUES (null, "Mhamad", "Harmush", "Lebanon");
INSERT INTO users VALUES (null, "Hamad", "Akel", "Syria");
INSERT INTO users VALUES (null, "Abdullah", "Helmi", "Egypt");
INSERT INTO users VALUES (null, "Rashed", "Masri", "Oman");
INSERT INTO users VALUES (null, "Majed", "Alali", "Yaman");
INSERT INTO users VALUES (null, "Rayan", "Kasabi", "KSA");

فيما يلي البيانات التي قمنا بإضافتها في الجدول users.

id first_name last_name country
1 Rami Masri Lebanon
2 Ahmad Naji Syria
3 Hanan Mostafa KSA
4 Saly Jawhar Lebanon
5 Mhamad Harmush Lebanon
6 Hamad Akel Syria
7 Abdullah Helmi Egypt
8 Rashed Masri Oman
9 Majed Alali Yaman
10 Rayan Kasabi KSA

أمثلة شاملة على كتابة الأنماط

الإستعلام التالي يجلب جميع الأسطر التي فيها الحقل first_name يبدأ بحرف A.

المثال الأول

SELECT * FROM users             -- users هنا قمنا بعرض بيانات جميع الأسطر الموجودة في الجدول
WHERE first_name LIKE 'A%';     -- A يبدأ بالحرف first_name التي فيها الحقل

النتيجة

id first_name last_name country
2 Ahmad Naji Syria
7 Abdullah Helmi Egypt

المثال الثاني

الإستعلام التالي يجلب جميع الأسطر التي فيها الحقل first_name ينتهي الحرفين ad.

الإستعلام

SELECT * FROM users             -- users هنا قمنا بعرض بيانات جميع الأسطر الموجودة في الجدول
WHERE first_name LIKE '%ad';    -- ad ينتهي بالحرفين first_name التي فيها الحقل

النتيجة

id first_name last_name country
2 Ahmad Naji Syria
5 Mhamad Harmush Lebanon
6 Hamad Akel Syria

المثال الثالث

الإستعلام التالي يجلب جميع الأسطر التي فيها الحقل first_name يبدأ بحرف M و ينتهي بحرف D.

الإستعلام

SELECT * FROM users              -- users هنا قمنا بعرض بيانات جميع الأسطر الموجودة في الجدول
WHERE first_name LIKE 'M%D';     -- D و ينتهي بالحرف M يبدأ بالحرف first_name التي فيها الحقل

النتيجة

id first_name last_name country
5 Mhamad Harmush Lebanon
9 Majed Alali Yaman

الإستعلام التالي يجلب جميع الأسطر التي فيها الحقل first_name يتضمن الحرفين am و لا يهم إن كانا موجودين في البداية أو في الوسط أو في النهاية.

المثال الرابع

SELECT * FROM users               -- users هنا قمنا بعرض بيانات جميع الأسطر الموجودة في الجدول
WHERE first_name LIKE '%am%';     -- و لا يهم إن كانا موجودين في البداية أو في الوسط أو في النهاية am يتضمن الحرفين first_name التي فيها الحقل

النتيجة

id first_name last_name country
1 Rami Masri Lebanon
5 Mhamad Harmush Lebanon
6 Hamad Akel Syria

الإستعلام التالي يجلب جميع الأسطر التي فيها الحقل first_name يبدأ بحرف A أو R.

المثال الخامس

SELECT * FROM users                                      -- users هنا قمنا بعرض بيانات جميع الأسطر الموجودة في الجدول
WHERE (first_name LIKE 'A%' OR first_name LIKE 'R%');    -- R أو الحرف A يبدأ بالحرف first_name التي فيها الحقل

النتيجة

id first_name last_name country
1 Rami Masri Lebanon
2 Ahmad Naji Syria
7 Abdullah Helmi Egypt
8 Rashed Masri Oman
10 Rayan Kasabi KSA

الإستعلام التالي يجلب جميع الأسطر التي فيها الحقل first_name لا يبدأ بالحرف A.

المثال السادس

SELECT * FROM users                -- users هنا قمنا بعرض بيانات جميع الأسطر الموجودة في الجدول
WHERE first_name NOT LIKE 'A%';    -- A لا يبدأ بالحرف first_name التي فيها الحقل

النتيجة

id first_name last_name country
1 Rami Masri Lebanon
3 Hanan Mostafa KSA
4 Saly Jawhar Lebanon
5 Mhamad Harmush Lebanon
6 Hamad Akel Syria
8 Rashed Masri Oman
9 Majed Alali Yaman
10 Rayan Kasabi KSA

جاهز لرحلة التحدي؟

قم بتوليد تمارين لا نهائية بشكل تدريجي (10 في كل مرة) بناءً على هذا الدرس. كل تمرين مصمم لرفع مستوى تفكيرك المنطقي.