Programming Basics SQL HTML CSS JavaScript React Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Linux Learn Typing

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

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

العامل LIKE

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


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

SELECT column1, column2, ...
FROM table_name
WHERE column_name LIKE pattern;
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");
-- سيتم حذفها 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 التي فيها الحقل
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 التي فيها الحقل
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 التي فيها الحقل
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 التي فيها الحقل
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 التي فيها الحقل
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 التي فيها الحقل
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