جملة WHERE في SQL (WHERE Clause)
حتى الآن، تعلمنا كيفية استخراج البيانات من الجداول باستخدام SELECT. لكن في معظم الحالات، لا نريد جميع الصفوف - نريد فقط الصفوف التي تحقق شروطاً معينة. هنا يأتي دور جملة WHERE! في هذا الدرس الشامل من سلسلة تعلم لغة SQL باللغة العربية، سنتعلم كيفية تصفية البيانات باستخدام معاملات المقارنة المختلفة، كيفية البحث عن قيم محددة، وكيفية كتابة شروط فعالة لاستخراج البيانات التي تحتاجها بالضبط.
1. ما هي جملة WHERE في SQL؟
جملة 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. أمثلة عملية على معامل المساواة (=)
لنفترض أن لدينا جدول الطلاب التالي:
+----+-----------+-----+--------+--------+
| 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 = 'الرياض';
+----+-----------+-----+--------+--------+
| id | name | age | city | grade |
+----+-----------+-----+--------+--------+
| 1 | أحمد | 20 | الرياض | A | ✓
| 3 | محمد | 21 | الرياض | A | ✓
| 6 | نورة | 19 | الرياض | A | ✓
+----+-----------+-----+--------+--------+
3 rows in set
ملاحظة مهمة: عند مقارنة النصوص، استخدم علامات الاقتباس المفردة ' أو المزدوجة ".
مثال 2: البحث عن طلاب بعمر محدد
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. معاملات المقارنة الرقمية (>, <, >=, <=)
لنفترض أن لدينا جدول منتجات:
+----+------------------+--------+-------+
| 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: نظام إدارة الموظفين
+----+-------------+------------+--------+
| id | name | department | salary |
+----+-------------+------------+--------+
| 1 | أحمد محمد | IT | 8000 |
| 2 | فاطمة علي | HR | 6000 |
| 3 | محمد حسن | Sales | 7000 |
| 4 | سارة أحمد | IT | 8500 |
| 5 | علي حسين | HR | 5500 |
+----+-------------+------------+--------+
SELECT name, salary FROM employees
WHERE department = 'IT';
+-------------+--------+
| name | salary |
+-------------+--------+
| أحمد محمد | 8000 |
| سارة أحمد | 8500 |
+-------------+--------+
مثال 2: الموظفون الذين يستحقون علاوة
SELECT
name,
department,
salary,
salary * 1.10 AS new_salary
FROM employees
WHERE salary < 7000;
+-------------+------------+--------+------------+
| name | department | salary | new_salary |
+-------------+------------+--------+------------+
| فاطمة علي | HR | 6000 | 6600.00 |
| علي حسين | HR | 5500 | 6050.00 |
+-------------+------------+--------+------------+
مثال 3: نظام المكتبة
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) وتطوير مهاراتك في قواعد البيانات.
الانتقال إلى الدرس التالي