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

SQLجلب البيانات ضمن شروط محددة

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

أهمية وضع الشروط في الإستعلامات

نستخدم الأمر WHERE لوضع شروط عند جلب، حذف، و تعديل البيانات.


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

الكلمة WHERE تستخدم مع الأمر WHERE على النحو التالي.

SELECT column1, column2, ...
FROM table_name
WHERE condition;
SELECT column1, column2, ... FROM table_name WHERE condition;

مكان الكلمة condition نكتب الشروط التي نريد تطبيقها عند جلب البيانات.

ستتعلم طريقة استخدام الكلمة WHERE لوضع شروط عند تحديث و حذف البيانات في دروس لاحقة

العوامل المستخدمة في الشروط

بشكل عام، يمكن استخدم العوامل ( Operators ) التالية مع جملة الشروط التي يتم وضعها بواسطة الكلمة WHERE.

العامل إستخدامه
= يستخدم هذا الرمز مع الأرقام و النصوص و التواريخ لتنفيذ الأمر في حال كانت القيم التي يتم مقارنتها متساوية.
!= يستخدم هذا الرمز مع الأرقام و النصوص و التواريخ لتنفيذ الأمر في حال كانت القيم التي يتم مقارنتها غير متساوية.
<> يستخدم هذا الرمز مع الأرقام و النصوص و التواريخ لتنفيذ الأمر في حال كانت القيم التي يتم مقارنتها غير متساوية مثل الرمز !=
> يستخدم هذا الرمز مع الأرقام و التواريخ لتنفيذ الأمر في حال كانت القيم التي يتم مقارنتها أكبر من قيمة محددة.
>= يستخدم هذا الرمز مع الأرقام و التواريخ لتنفيذ الأمر في حال كانت القيم التي يتم مقارنتها أكبر أو تساوي قيمة محددة.
< يستخدم هذا الرمز مع الأرقام و التواريخ لتنفيذ الأمر في حال كانت القيم التي يتم مقارنتها أصغر من قيمة محددة.
<= يستخدم هذا الرمز مع الأرقام و التواريخ لتنفيذ الأمر في حال كانت القيم التي يتم مقارنتها أصغر أو تساوي قيمة محددة.
AND نستخدم هذه الكلمة لتنفيذ الأمر في حال تحقق الشرط الموضوع قبلها و الشرط الموضوع بعدها.
هنا يجب أن يتحقق كلا الشرطين حتي يتم تنفيذ الأمر.
OR نستخدم هذه الكلمة لتنفيذ الأمر في حال تحقق الشرط الموضوع قبلها أو الشرط الموضوع بعدها.
هنا يكفي أن يتحقق إحدى الشرطين حتي يتم تنفيذ الأمر.
IN نستخدم هذه الكلمة لتنفيذ الأمر في حال كانت القيمة الموجود قبلها تساوي إحدى القيم الموضوع فيها.
BETWEEN نستخدم هذه الجملة لتنفيذ الأمر في حال كانت القيمة موجود بين قيمتين.

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

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

المثال

-- سيتم حذفها harmash في حال كان يوجد بالأساس قاعدة بيانات إسمها
DROP DATABASE IF EXISTS harmash;
-- harmash هنا قمنا بإنشاء قاعدة بيانات جديدة إسمها
CREATE DATABASE harmash;
-- harmash هنا قمنا بتحديد أن أي إستعلام جديد سيتم تنفيذه على قاعدة البيانات
USE harmash;
-- يتألف من أربعة أعمدة employees هنا قمنا بإنشاء جدول جديد إسمه
-- لأننا قمنا بتحديدها قبل إستدعاء هذا الأمر harmash سيتم إنشاء هذا الجدول بداخل قاعدة البيانات
CREATE TABLE employees (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR(50),
last_name VARCHAR(20),
salary DECIMAL(7,2)
);
-- هنا قمنا بإضافة 10 أسطر في الجدول, أي أضفنا معلومات 10 موظفين
-- لاحظ أننا لم نحدد أسماء الأعمدة التي سنضع فيها البيانات لأننا قمنا بملئ جميع المعلومات
-- في البداية هو حتى يكون عدد القيم الموضوعة يساوي عدد أعمدة الجدول null سبب وضع الكلمة
-- ستقوم قاعدة البيانات بوضع رقم تعرفة مختلف لكل سطر null مكان الكلمة
INSERT INTO employees VALUES (null, "Ahmad", "Alhazem", 800);
INSERT INTO employees VALUES (null, "Rami", "Algharib", 750);
INSERT INTO employees VALUES (null, "Said", "Alnaja", 900);
INSERT INTO employees VALUES (null, "Noura", "Jamali", 845);
INSERT INTO employees VALUES (null, "Amani", "Sarrouf", 1000);
INSERT INTO employees VALUES (null, "Mhamad", "Harmush", 700);
INSERT INTO employees VALUES (null, "Ahmad", "Asaadi", 850);
INSERT INTO employees VALUES (null, "Mostafa", "Shawki", 920);
INSERT INTO employees VALUES (null, "Jana", "Alkassem", 780);
INSERT INTO employees VALUES (null, "Houssam", "Zahrani", 880);
-- سيتم حذفها harmash في حال كان يوجد بالأساس قاعدة بيانات إسمها DROP DATABASE IF EXISTS harmash; -- harmash هنا قمنا بإنشاء قاعدة بيانات جديدة إسمها CREATE DATABASE harmash; -- harmash هنا قمنا بتحديد أن أي إستعلام جديد سيتم تنفيذه على قاعدة البيانات USE harmash; -- يتألف من أربعة أعمدة employees هنا قمنا بإنشاء جدول جديد إسمه -- لأننا قمنا بتحديدها قبل إستدعاء هذا الأمر harmash سيتم إنشاء هذا الجدول بداخل قاعدة البيانات CREATE TABLE employees ( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, first_name VARCHAR(50), last_name VARCHAR(20), salary DECIMAL(7,2) ); -- هنا قمنا بإضافة 10 أسطر في الجدول, أي أضفنا معلومات 10 موظفين -- لاحظ أننا لم نحدد أسماء الأعمدة التي سنضع فيها البيانات لأننا قمنا بملئ جميع المعلومات -- في البداية هو حتى يكون عدد القيم الموضوعة يساوي عدد أعمدة الجدول null سبب وضع الكلمة -- ستقوم قاعدة البيانات بوضع رقم تعرفة مختلف لكل سطر null مكان الكلمة INSERT INTO employees VALUES (null, "Ahmad", "Alhazem", 800); INSERT INTO employees VALUES (null, "Rami", "Algharib", 750); INSERT INTO employees VALUES (null, "Said", "Alnaja", 900); INSERT INTO employees VALUES (null, "Noura", "Jamali", 845); INSERT INTO employees VALUES (null, "Amani", "Sarrouf", 1000); INSERT INTO employees VALUES (null, "Mhamad", "Harmush", 700); INSERT INTO employees VALUES (null, "Ahmad", "Asaadi", 850); INSERT INTO employees VALUES (null, "Mostafa", "Shawki", 920); INSERT INTO employees VALUES (null, "Jana", "Alkassem", 780); INSERT INTO employees VALUES (null, "Houssam", "Zahrani", 880);

بعد تنفيذ الإستعلام السابق في phpMyAdmin سيتم إنشاء قاعدة البيانات harmash و إنشاء الجدول employees بداخلها.
قم بالنقر على إسم قاعدة البيانات harmash من القائمة اليسرى حتى تبدأ بالتعامل معها و تطبيق ما ستتعلمه في هذا الدرس.

أمثلة حول جلب بيانات ضمن شروط محددة

الإستعلام التالي يجلب كل معلومات الموظف الذي يملك رقم id يساوي 6.

المثال الأول

SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول
WHERE id = 6; -- يساوي 6 id بشرط أن يكون كل سطر ستحضره يملك رقم
SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول WHERE id = 6; -- يساوي 6 id بشرط أن يكون كل سطر ستحضره يملك رقم

النتيجة

id first_name last_name salary
6 Mhamad Harmush 700.00

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

في جدول الموظفين، بما أن الشيء الوحيد الذي لا يمكن أن يتكرر في الجدول الذي نتعامل معه هو رقم التعرفة id يمكننا الإعتماد عليه للتمييز بين موظف و آخر.


الإستعلام التالي يجلب معلومات كل موظف يتلقى راتب أكبر أو يساوي 800 دولار.
ملاحظة: يوجد 7 موظفين راتبهم أعلى أو يساوي 800 دولار.

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

SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول
WHERE salary >= 800; -- أكبر أو يساوي 800 salary بشرط أن يكون كل سطر ستحضره يملك
SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول WHERE salary >= 800; -- أكبر أو يساوي 800 salary بشرط أن يكون كل سطر ستحضره يملك

النتيجة

id first_name last_name salary
1 Ahmad Alhazem 800.00
3 Said Alnaja 900.00
4 Noura Jamali 845.00
5 Amani Sarrouf 1000.00
7 Ahmad Asaadi 850.00
8 Mostafa Shawki 920.00
10 Houssam Zahrani 880.00

الإستعلام التالي يجلب معلومات كل موظف يتلقى راتب أقل من 800 دولار.
ملاحظة: يوجد 3 موظفين راتبهم أقل من 800 دولار.

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

SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول
WHERE salary < 800; -- أكبرأقل من 800 salary بشرط أن يكون كل سطر ستحضره يملك
SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول WHERE salary < 800; -- أكبرأقل من 800 salary بشرط أن يكون كل سطر ستحضره يملك

النتيجة

id first_name last_name salary
2 Rami Algharib 750.00
6 Mhamad Harmush 700.00
9 Jana Alkassem 780.00

الإستعلام التالي يجلب معلومات كل موظف يتلقى راتب لا يساوي 800 دولار.
ملاحظة: يوجد 9 موظفين راتبهم لا يساوي 800 دولار.

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

SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول
WHERE salary != 800; -- لا يساوي 800 salary بشرط أن يكون كل سطر ستحضره يملك
SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول WHERE salary != 800; -- لا يساوي 800 salary بشرط أن يكون كل سطر ستحضره يملك

يمكن كتابة الإستعلام بهذه الطريقة أيضاً.

SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول
WHERE salary <> 800; -- لا يساوي 800 salary بشرط أن يكون كل سطر ستحضره يملك
SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول WHERE salary <> 800; -- لا يساوي 800 salary بشرط أن يكون كل سطر ستحضره يملك

النتيجة

id first_name last_name salary
2 Rami Algharib 750.00
3 Said Alnaja 900.00
4 Noura Jamali 845.00
5 Amani Sarrouf 1000.00
6 Mhamad Harmush 700.00
7 Ahmad Asaadi 850.00
8 Mostafa Shawki 920.00
9 Jana Alkassem 780.00
10 Houssam Zahrani 880.00

الإستعلام التالي يجلب معلومات كل موظف يتلقى راتب أعلى من 2000 دولار.
ملاحظة: لا يوجد أي موظف راتبه أعلى من 2000 دولار.

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

SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول
WHERE salary > 2000; -- أعلى من 2000 salary بشرط أن يكون كل سطر ستحضره يملك
SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول WHERE salary > 2000; -- أعلى من 2000 salary بشرط أن يكون كل سطر ستحضره يملك

النتيجة

id first_name last_name salary

الإستعلام التالي يجلب معلومات كل موظف يتلقى راتب أعلى من 800 دولار و إسمه 'Mhamad'.
ملاحظة: يوجد موظف إسمه 'Mhamad' و لكن راتبه أقل من 800 دولار و لهذا لن يتم وضعه في النتيجة.

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

SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول
WHERE salary > 800 AND first_name = 'Mhamad'; -- 'Mhamad' يساوي first_name أعلى من 800 و يملك salary بشرط أن يكون كل سطر ستحضره يملك
SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول WHERE salary > 800 AND first_name = 'Mhamad'; -- 'Mhamad' يساوي first_name أعلى من 800 و يملك salary بشرط أن يكون كل سطر ستحضره يملك

النتيجة

id first_name last_name salary

الإستعلام التالي يجلب معلومات كل موظف يتلقى راتب أعلى من 800 دولار أو إسمه 'Mhamad'.
ملاحظة: يوجد 6 موظفين راتبهم أعلى من 800 دولار، بالإضافة إلى موظف راتبه أقل من 800 دولار و لكن إسمه 'Mhamad' لهذا سيتم وضعه معهم في النتيجة.

المثال السابع

SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول
WHERE salary > 800 OR first_name = 'Mhamad'; -- 'Mhamad' يساوي first_name أعلى من 800 أو يملك salary بشرط أن يكون كل سطر ستحضره يملك
SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول WHERE salary > 800 OR first_name = 'Mhamad'; -- 'Mhamad' يساوي first_name أعلى من 800 أو يملك salary بشرط أن يكون كل سطر ستحضره يملك

النتيجة

id first_name last_name salary
3 Said Alnaja 900.00
4 Noura Jamali 845.00
5 Amani Sarrouf 1000.00
6 Mhamad Harmush 700.00
7 Ahmad Asaadi 850.00
8 Mostafa Shawki 920.00
10 Houssam Zahrani 880.00

الإستعلام التالي يجلب معلومات كل موظف يتلقى راتب يساوي 800 أو 850 أو 900 دولار.
ملاحظة: يوجد 3 موظفين راتبهم أقل من 800 دولار.

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

SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول
WHERE salary IN (800, 850, 900); -- يساوي 800 أو 850 أو 900 salary بشرط أن يكون كل سطر ستحضره يملك
SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول WHERE salary IN (800, 850, 900); -- يساوي 800 أو 850 أو 900 salary بشرط أن يكون كل سطر ستحضره يملك

النتيجة

id first_name last_name salary
1 Ahmad Alhazem 800.00
3 Said Alnaja 900.00
7 Ahmad Asaadi 850.00


المثال التاسع

الإستعلام التالي يجلب معلومات كل موظف يتلقى راتب بين 800 و 900 دولار.
ملاحظة: يوجد 5 موظفين راتبهم يتراوح بين 800 و 900 دولار.

الإستعلام

SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول
WHERE salary BETWEEN 800 AND 900; -- على الأقل 800 و على الأكثر 900 salary بشرط أن يكون كل سطر ستحضره يملك
SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول WHERE salary BETWEEN 800 AND 900; -- على الأقل 800 و على الأكثر 900 salary بشرط أن يكون كل سطر ستحضره يملك

يمكن كتابة الإستعلام بهذه الطريقة أيضاً.

SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول
WHERE salary >= 800 AND salary <= 900; -- على الأقل 800 و على الأكثر 900 salary بشرط أن يكون كل سطر ستحضره يملك
SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول WHERE salary >= 800 AND salary <= 900; -- على الأقل 800 و على الأكثر 900 salary بشرط أن يكون كل سطر ستحضره يملك

النتيجة

id first_name last_name salary
1 Ahmad Alhazem 800.00
3 Said Alnaja 900.00
4 Noura Jamali 845.00
7 Ahmad Asaadi 850.00
10 Houssam Zahrani 880.00