جملة WHERE في SQL (WHERE Clause)

حتى الآن، تعلمنا كيفية استخراج البيانات من الجداول باستخدام SELECT. لكن في معظم الحالات، لا نريد جميع الصفوف - نريد فقط الصفوف التي تحقق شروطاً معينة. هنا يأتي دور جملة WHERE! في هذا الدرس الشامل من سلسلة تعلم لغة SQL باللغة العربية، سنتعلم كيفية تصفية البيانات باستخدام معاملات المقارنة المختلفة، كيفية البحث عن قيم محددة، وكيفية كتابة شروط فعالة لاستخراج البيانات التي تحتاجها بالضبط.

1. ما هي جملة WHERE في SQL؟

جملة WHERE تُستخدم لتصفية الصفوف بناءً على شرط أو مجموعة شروط. بدلاً من إرجاع جميع الصفوف من الجدول، تُرجع فقط الصفوف التي تحقق الشرط المحدد.

البنية الأساسية لجملة WHERE
SELECT column1, column2, ...
FROM table_name
WHERE condition;

شرح المكونات:

  • WHERE: الكلمة المفتاحية التي تبدأ بها شرط التصفية
  • condition: الشرط الذي يجب أن يتحقق في الصفوف المُرجعة
تشبيه: فكر في WHERE كمصفاة القهوة - تمرر فقط ما تريده وتحجب الباقي. إذا كان لديك 1000 طالب وتريد فقط الطلاب من مدينة الرياض، WHERE تُرجع فقط طلاب الرياض.

2. معاملات المقارنة (Comparison Operators)

معاملات المقارنة تُستخدم لمقارنة قيمة عمود بقيمة أخرى. إليك جميع المعاملات المتاحة:

المعامل الوصف مثال
= يساوي (Equal to) age = 20
!= or <> لا يساوي (Not equal to) city != 'الرياض'
> أكبر من (Greater than) price > 100
< أصغر من (Less than) age < 18
>= أكبر من أو يساوي (Greater than or equal) salary >= 5000
<= أصغر من أو يساوي (Less than or equal) quantity <= 10

3. أمثلة عملية على معامل المساواة (=)

لنفترض أن لدينا جدول الطلاب التالي:

جدول students
+----+-----------+-----+--------+--------+
| id | name      | age | city   | grade  |
+----+-----------+-----+--------+--------+
| 1  | أحمد      | 20  | الرياض | A      |
| 2  | فاطمة     | 19  | جدة    | B      |
| 3  | محمد      | 21  | الرياض | A      |
| 4  | سارة      | 20  | مكة    | C      |
| 5  | علي       | 22  | جدة    | B      |
| 6  | نورة      | 19  | الرياض | A      |
+----+-----------+-----+--------+--------+
مثال 1: البحث عن طلاب من مدينة محددة
استخراج طلاب الرياض فقط
SELECT * FROM students
WHERE city = 'الرياض';
النتيجة (3 صفوف فقط)
+----+-----------+-----+--------+--------+
| id | name      | age | city   | grade  |
+----+-----------+-----+--------+--------+
| 1  | أحمد      | 20  | الرياض | A      | ✓
| 3  | محمد      | 21  | الرياض | A      | ✓
| 6  | نورة      | 19  | الرياض | A      | ✓
+----+-----------+-----+--------+--------+
3 rows in set

ملاحظة مهمة: عند مقارنة النصوص، استخدم علامات الاقتباس المفردة ' أو المزدوجة ".

مثال 2: البحث عن طلاب بعمر محدد
الطلاب الذين عمرهم 20 سنة
SELECT name, age, city FROM students
WHERE age = 20;
النتيجة
+-----------+-----+--------+
| name      | age | city   |
+-----------+-----+--------+
| أحمد      | 20  | الرياض |
| سارة      | 20  | مكة    |
+-----------+-----+--------+
2 rows in set

ملاحظة: عند مقارنة الأرقام، لا تستخدم علامات الاقتباس.

4. معامل عدم المساواة (!=)

مثال: استبعاد مدينة معينة
جميع الطلاب ما عدا طلاب جدة
SELECT name, city FROM students
WHERE city != 'جدة';
النتيجة
+-----------+--------+
| name      | city   |
+-----------+--------+
| أحمد      | الرياض |
| محمد      | الرياض |
| سارة      | مكة    |
| نورة      | الرياض |
+-----------+--------+
4 rows in set
ملاحظة: يمكنك استخدام != أو <> - كلاهما يعني "لا يساوي". لكن != أكثر شيوعاً.

5. معاملات المقارنة الرقمية (>, <, >=, <=)

لنفترض أن لدينا جدول منتجات:

جدول products
+----+------------------+--------+-------+
| id | name             | price  | stock |
+----+------------------+--------+-------+
| 1  | لابتوب Dell      | 3500   | 15    |
| 2  | ماوس لاسلكي      | 50     | 200   |
| 3  | لوحة مفاتيح      | 120    | 80    |
| 4  | شاشة Samsung     | 800    | 25    |
| 5  | سماعات Bluetooth | 150    | 60    |
| 6  | كاميرا ويب       | 200    | 40    |
+----+------------------+--------+-------+
مثال 1: المنتجات الأغلى من 500 ريال (>)
المنتجات الغالية
SELECT name, price FROM products
WHERE price > 500;
النتيجة
+------------------+--------+
| name             | price  |
+------------------+--------+
| لابتوب Dell      | 3500   | ✓ (3500 > 500)
| شاشة Samsung     | 800    | ✓ (800 > 500)
+------------------+--------+
2 rows in set
مثال 2: المنتجات الرخيصة أو تساوي 150 ريال (<=)
المنتجات الرخيصة
SELECT name, price FROM products
WHERE price <= 150;
النتيجة
+------------------+--------+
| name             | price  |
+------------------+--------+
| ماوس لاسلكي      | 50     | ✓ (50 <= 150)
| لوحة مفاتيح      | 120    | ✓ (120 <= 150)
| سماعات Bluetooth | 150    | ✓ (150 <= 150)
+------------------+--------+
3 rows in set
مثال 3: المنتجات ذات المخزون القليل (<)
تنبيه: مخزون منخفض
SELECT name, stock FROM products
WHERE stock < 30;
النتيجة
+------------------+-------+
| name             | stock |
+------------------+-------+
| لابتوب Dell      | 15    | ⚠️ يحتاج إعادة طلب
| شاشة Samsung     | 25    | ⚠️ يحتاج إعادة طلب
+------------------+-------+
2 rows in set

6. أمثلة عملية متقدمة

مثال 1: نظام إدارة الموظفين
جدول employees
+----+-------------+------------+--------+
| id | name        | department | salary |
+----+-------------+------------+--------+
| 1  | أحمد محمد   | IT         | 8000   |
| 2  | فاطمة علي   | HR         | 6000   |
| 3  | محمد حسن    | Sales      | 7000   |
| 4  | سارة أحمد   | IT         | 8500   |
| 5  | علي حسين    | HR         | 5500   |
+----+-------------+------------+--------+
الموظفون في قسم IT
SELECT name, salary FROM employees
WHERE department = 'IT';
النتيجة
+-------------+--------+
| name        | salary |
+-------------+--------+
| أحمد محمد   | 8000   |
| سارة أحمد   | 8500   |
+-------------+--------+
مثال 2: الموظفون الذين يستحقون علاوة
رواتب أقل من 7000
SELECT 
    name,
    department,
    salary,
    salary * 1.10 AS new_salary
FROM employees
WHERE salary < 7000;
النتيجة (علاوة 10%)
+-------------+------------+--------+------------+
| name        | department | salary | new_salary |
+-------------+------------+--------+------------+
| فاطمة علي   | HR         | 6000   | 6600.00    |
| علي حسين    | HR         | 5500   | 6050.00    |
+-------------+------------+--------+------------+
مثال 3: نظام المكتبة
الكتب المنشورة بعد 2020
SELECT title, author, year FROM books
WHERE year > 2020;

7. نصائح وأفضل الممارسات

1. استخدم علامات الاقتباس للنصوص فقط
صحيح وخطأ
-- ✓ صحيح: نص بعلامات اقتباس
WHERE city = 'الرياض'

-- ✓ صحيح: رقم بدون علامات اقتباس
WHERE age = 20

-- ✗ خطأ: رقم بعلامات اقتباس (قد يعمل لكن غير موصى به)
WHERE age = '20'

-- ✗ خطأ: نص بدون علامات اقتباس
WHERE city = الرياض  -- سيعطي خطأ
2. انتبه للحساسية لحالة الأحرف

في معظم أنظمة SQL، المقارنات النصية غير حساسة لحالة الأحرف (Case-insensitive) بشكل افتراضي:

مثال
-- هذه الثلاثة متساوية في معظم الأنظمة
WHERE name = 'Ahmed'
WHERE name = 'ahmed'
WHERE name = 'AHMED'
3. استخدم المسافات لتحسين القراءة
تنسيق جيد
-- جيد: سهل القراءة
SELECT name, salary
FROM employees
WHERE salary >= 7000;

-- سيء: صعب القراءة
SELECT name,salary FROM employees WHERE salary>=7000;
4. اختبر الشروط على بيانات صغيرة أولاً

قبل تطبيق شرط WHERE على جدول كبير، اختبره على عينة صغيرة للتأكد من صحته.

8. الأخطاء الشائعة

خطأ 1: استخدام = بدلاً من LIKE للبحث الجزئي
مشكلة شائعة
-- ✗ خطأ: لن يجد "أحمد محمد" أو "محمد أحمد"
WHERE name = 'أحمد'

-- ✓ صحيح: سيجد أي اسم يحتوي على "أحمد"
WHERE name LIKE '%أحمد%'  -- سنتعلمها في درس قادم
خطأ 2: نسيان علامات الاقتباس
خطأ شائع
-- ✗ خطأ
WHERE city = الرياض
-- Error: Unknown column 'الرياض'

-- ✓ صحيح
WHERE city = 'الرياض'
خطأ 3: الخلط بين = و ==
تنبيه
-- ✓ صحيح في SQL
WHERE age = 20

-- ✗ خطأ: == تُستخدم في لغات البرمجة، ليس SQL
WHERE age == 20
ملخص الدرس
  • WHERE: تُستخدم لتصفية الصفوف بناءً على شروط محددة
  • =: يساوي (للمقارنة الدقيقة)
  • != أو <>: لا يساوي
  • >, <: أكبر من، أصغر من
  • >=, <=: أكبر من أو يساوي، أصغر من أو يساوي
  • النصوص: تحتاج علامات اقتباس، الأرقام لا تحتاج
  • Best Practice: اختبر الشروط على بيانات صغيرة أولاً

الخطوة التالية: المعاملات المنطقية في SQL (Logical Operators)

أكمل رحلتك التعليمية وانتقل إلى الدرس التالي لتعلم المعاملات المنطقية في (Logical Operators) وتطوير مهاراتك في قواعد البيانات.

الانتقال إلى الدرس التالي
المحرر الذكي

اكتب الكود وشاهد النتيجة فوراً

جرب الآن مجاناً
قناة ديف عربي

تابع أحدث الدروس والتحديثات مباشرة على واتساب

انضم الآن