SQL جلب البيانات ضمن شروط محددة
أهمية وضع الشروط في الإستعلامات
على الأغلب ستقوم بوضع شروط في أغلب الإستعلامات التي ستكتبها مستقبلاً و ذلك لأسباب عديدة أهمها تحديد البيانات التي تريد جلبها, حذفها أو التعديل عليها.
وضع الشروط سهل جداً و هو أمر مهم جداً و أساسي عند التعامل مع البيانات بشكل محدد و إليك بعض الحالات التي لا بد أن تتعامل فيها مع الشروط:
إذا كنت تريد حذف مستخدم محدد من قاعدة البيانات عليك وضع شرط في الإستعلام مفاده انك تريد حذف هذا الشخص بالضبط و ليس جميع المستخدمين.
إذا كنت تريد إحصاء عدد الأشخاص الذين ولدوا في سنة محددة عليك وضع شرط تحدد فيه رقم السنة.
إذا كنت تريد معرفة عدد المستخدمين الذكور و عدد المستخدمين الإناث فعليك وضع شرط تحدد فيه جنس الأشخاص الذين ستقوم بحسابهم في كل مرة و هكذا.
بشكل عام, في SQL نستخدم الأمر WHERE
لوضع الشروط و مع هذه الكلمة يجب أن تستخدم إحدى الرموز التالية.
الرمز | إستخدامه |
---|---|
= |
يستخدم هذا الرمز مع الأرقام و النصوص و التواريخ لتنفيذ الأمر في حال كانت القيم التي يتم مقارنتها متساوية. |
!= |
يستخدم هذا الرمز مع الأرقام و النصوص و التواريخ لتنفيذ الأمر في حال كانت القيم التي يتم مقارنتها غير متساوية. |
<> |
يستخدم هذا الرمز مع الأرقام و النصوص و التواريخ لتنفيذ الأمر في حال كانت القيم التي يتم مقارنتها غير متساوية مثل الرمز != |
> |
يستخدم هذا الرمز مع الأرقام و التواريخ لتنفيذ الأمر في حال كانت القيم التي يتم مقارنتها أكبر من قيمة محددة. |
>= |
يستخدم هذا الرمز مع الأرقام و التواريخ لتنفيذ الأمر في حال كانت القيم التي يتم مقارنتها أكبر أو تساوي قيمة محددة. |
< |
يستخدم هذا الرمز مع الأرقام و التواريخ لتنفيذ الأمر في حال كانت القيم التي يتم مقارنتها أصغر من قيمة محددة. |
<= |
يستخدم هذا الرمز مع الأرقام و التواريخ لتنفيذ الأمر في حال كانت القيم التي يتم مقارنتها أصغر أو تساوي قيمة محددة. |
في حال أردت وضع أكثر من شرط أو أكثر من خيار حتى تحدد ما إن كان سيتم تنفيذ الأوامر, يمكنك إستخدام الكلمات التالية.
الكلمة | إستخدامها |
---|---|
AND |
نستخدم هذه الكلمة لتنفيذ الأمر في حال تحقق الشرط الموضوع قبلها و الشرط الموضوع بعدها. هنا يجب أن يتحقق كلا الشرطين حتي يتم تنفيذ الأمر. |
OR |
نستخدم هذه الكلمة لتنفيذ الأمر في حال تحقق الشرط الموضوع قبلها أو الشرط الموضوع بعدها. هنا يكفي أن يتحقق إحدى الشرطين حتي يتم تنفيذ الأمر. |
IN (value1, value2, ...) |
نستخدم هذه الكلمة لتنفيذ الأمر في حال كانت القيمة الموجود قبلها تساوي إحدى القيم الموضوع فيها. |
BETWEEN value1 AND value2 |
نستخدم هذه الجملة لتنفيذ الأمر في حال كانت القيمة موجود بين قيمتين. |
تجهيز قاعدة البيانات التي سنطبق عليها
قم بتنفيذ الإستعلام التالي حتى تنشئ قاعدة بيانات جديدة إسمها 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);
بعد تنفيذ الإستعلام السابق في phpMyAdmin سيتم إنشاء قاعدة البيانات harmash
و إنشاء الجدول employees
بداخلها.
قم بالنقر على إسم قاعدة البيانات harmash
من القائمة اليسرى حتى تبدأ بالتعامل معها و تطبيق ما ستتعلمه في هذا الدرس.
أمثلة حول جلب بيانات ضمن شروط محددة
المثال الأول
عندما تريد الوصول لسطر محدد في أي جدول عليك التعامل مع الحقل الموجود فيه و الذي لا يمكن أن يحتوي على قيم مكررة.
فمثلاً لا يمكنك الإعتماد على أسماء الأشخاص لأنك قد تجد أكثر من شخص عندهم نفس الإسم.
الآن, بما أن الشيء الوحيد الذي لا يمكن أن يتكرر في الجدول الذي نتعامل معه هو رقم التعرفة id
يمكننا الإعتماد عليه للتمييز بين موظف و آخر.
الإستعلام التالي يجلب كل معلومات الموظف الذي يملك رقم id
يساوي 6
.
الإستعلام
SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول WHERE id = 6; -- يساوي 6 id بشرط أن يكون كل سطر ستحضره يملك رقم
سنحصل على النتيجة التالية عند تنفيذ الإستعلام لأنه يوجد سطر واحد فقط في الجدول يملك رقم id
يساوي 6
.
id | first_name | last_name | salary |
---|---|---|---|
6 | Mhamad | Harmush | 700.00 |
المثال الثاني
الإستعلام التالي يجلب معلومات كل موظف يتلقى راتب أكبر أو يساوي 800
دولار.
الإستعلام
SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول WHERE salary >= 800; -- أكبر أو يساوي 800 salary بشرط أن يكون كل سطر ستحضره يملك
سنحصل على النتيجة التالية عند تنفيذ الإستعلام, لاحظ أنه يوجد 7 موظفين راتبهم أعلى أو يساوي 800
دولار.
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
دولار.
الإستعلام
SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول WHERE salary < 800; -- أكبرأقل من 800 salary بشرط أن يكون كل سطر ستحضره يملك
سنحصل على النتيجة التالية عند تنفيذ الإستعلام, لاحظ أنه يوجد 3 موظفين راتبهم أقل من 800
دولار.
id | first_name | last_name | salary |
---|---|---|---|
2 | Rami | Algharib | 750.00 |
6 | Mhamad | Harmush | 700.00 |
9 | Jana | Alkassem | 780.00 |
المثال الرابع
الإستعلام التالي يجلب معلومات كل موظف يتلقى راتب لا يساوي 800
دولار.
الإستعلام
SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول WHERE salary != 800; -- لا يساوي 800 salary بشرط أن يكون كل سطر ستحضره يملك
يمكن كتابة الإستعلام بهذه الطريقة أيضاً.
SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول WHERE salary <> 800; -- لا يساوي 800 salary بشرط أن يكون كل سطر ستحضره يملك
سنحصل على النتيجة التالية عند تنفيذ الإستعلام, لاحظ أنه يوجد 9 موظفين راتبهم لا يساوي 800
دولار.
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
دولار.
الإستعلام
SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول WHERE salary > 2000; -- أعلى من 2000 salary بشرط أن يكون كل سطر ستحضره يملك
سنحصل على النتيجة التالية عند تنفيذ الإستعلام, لاحظ أنه لا يوجد أي موظف راتبه أعلى من 2000
دولار.
id | first_name | last_name | salary |
---|---|---|---|
المثال السادس
الإستعلام التالي يجلب معلومات كل موظف يتلقى راتب أعلى من 800
دولار و إسمه 'Mhamad'
.
الإستعلام
SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول WHERE salary > 800 AND first_name = 'Mhamad'; -- 'Mhamad' يساوي first_name أعلى من 800 و يملك salary بشرط أن يكون كل سطر ستحضره يملك
سنحصل على النتيجة التالية عند تنفيذ الإستعلام, لاحظ أنه لا يوجد أي موظف راتبه أعلى من 800
دولار و إسمه 'Mhamad'
بنفس الوقت.
ملاحظة: صحيح أنه يوجد موظف إسمه 'Mhamad'
و لكن بما أن راتبه أقل من 800
دولار لن يتم وضعه في الجدول.
id | first_name | last_name | salary |
---|---|---|---|
المثال السابع
الإستعلام التالي يجلب معلومات كل موظف يتلقى راتب أعلى من 800
دولار أو إسمه 'Mhamad'
.
الإستعلام
SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول WHERE salary > 800 OR first_name = 'Mhamad'; -- 'Mhamad' يساوي first_name أعلى من 800 أو يملك salary بشرط أن يكون كل سطر ستحضره يملك
سنحصل على النتيجة التالية عند تنفيذ الإستعلام, لاحظ أنه يوجد 6 موظفين راتبهم أعلى من 800
دولار و يوجد موظف راتبه أقل من 800
دولار و لكن إسمه 'Mhamad'
لهذا تم وضعه معهم في الجدول.
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
دولار.
الإستعلام
SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول WHERE salary IN (800, 850, 900); -- يساوي 800 أو 850 أو 900 salary بشرط أن يكون كل سطر ستحضره يملك
سنحصل على النتيجة التالية عند تنفيذ الإستعلام, لاحظ أنه يوجد 3 موظفين راتبهم أقل من 800
دولار.
id | first_name | last_name | salary |
---|---|---|---|
1 | Ahmad | Alhazem | 800.00 |
3 | Said | Alnaja | 900.00 |
7 | Ahmad | Asaadi | 850.00 |
المثال التاسع
الإستعلام التالي يجلب معلومات كل موظف يتلقى راتب بين 800
و 900
دولار.
الإستعلام
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 بشرط أن يكون كل سطر ستحضره يملك
سنحصل على النتيجة التالية عند تنفيذ الإستعلام, لاحظ أنه يوجد 3 موظفين راتبهم أقل من 800
دولار.
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 |