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

في الدرس السابق، تعلمنا كيفية تصفية البيانات باستخدام شرط واحد مع WHERE. لكن في الواقع، غالباً ما نحتاج إلى دمج عدة شروط معاً. في هذا الدرس الشامل من سلسلة تعلم لغة SQL باللغة العربية، سنتعلم المعاملات المنطقية AND و OR و NOT التي تسمح لنا بإنشاء شروط معقدة ومرنة. ستتعلم كيفية دمج الشروط، فهم أولوية المعاملات، وكتابة استعلامات متقدمة لاستخراج البيانات بدقة.

1. ما هي المعاملات المنطقية في SQL؟

المعاملات المنطقية (Logical Operators) تُستخدم لدمج شرطين أو أكثر في جملة WHERE. هناك ثلاثة معاملات منطقية رئيسية:

المعامل الوصف مثال
AND يُرجع TRUE إذا تحقق جميع الشروط age > 18 AND city = 'الرياض'
OR يُرجع TRUE إذا تحقق أي شرط من الشروط city = 'جدة' OR city = 'مكة'
NOT يعكس نتيجة الشرط (TRUE → FALSE والعكس) NOT city = 'الرياض'
تشبيه: فكر في AND كـ "يجب أن يتحقق كل شيء"، و OR كـ "يكفي أن يتحقق شيء واحد"، و NOT كـ "عكس الشرط".

2. معامل AND: يجب تحقق جميع الشروط

معامل AND يُرجع الصفوف التي تحقق جميع الشروط المحددة. إذا فشل أي شرط، لن تُرجع الصف.

البنية الأساسية
SELECT column1, column2
FROM table_name
WHERE condition1 AND condition2;
جدول الحقيقة لـ AND
الشرط 1 الشرط 2 النتيجة (AND)
TRUE TRUE TRUE
TRUE FALSE FALSE
FALSE TRUE FALSE
FALSE FALSE FALSE

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

جدول 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: طلاب من الرياض وعمرهم 20 سنة
استخدام AND
SELECT name, age, city FROM students
WHERE city = 'الرياض' AND age = 20;
النتيجة
+-----------+-----+--------+
| name      | age | city   |
+-----------+-----+--------+
| أحمد      | 20  | الرياض | ✓ (الرياض ✓ AND 20 ✓)
+-----------+-----+--------+
1 row in set

-- لماذا لم تظهر نورة؟
-- نورة: الرياض ✓ لكن عمرها 19 ✗ → FALSE
-- محمد: الرياض ✓ لكن عمره 21 ✗ → FALSE
مثال 2: طلاب متفوقون من الرياض
شرطان معاً
SELECT name, city, grade FROM students
WHERE city = 'الرياض' AND grade = 'A';
النتيجة
+-----------+--------+--------+
| name      | city   | grade  |
+-----------+--------+--------+
| أحمد      | الرياض | A      | ✓
| محمد      | الرياض | A      | ✓
| نورة      | الرياض | A      | ✓
+-----------+--------+--------+
3 rows in set
مثال 3: ثلاثة شروط معاً
شروط متعددة
SELECT name, age, city, grade FROM students
WHERE city = 'الرياض' AND grade = 'A' AND age >= 20;
النتيجة
+-----------+-----+--------+--------+
| name      | age | city   | grade  |
+-----------+-----+--------+--------+
| أحمد      | 20  | الرياض | A      | ✓ (الرياض ✓ AND A ✓ AND 20 ✓)
| محمد      | 21  | الرياض | A      | ✓ (الرياض ✓ AND A ✓ AND 21 ✓)
+-----------+-----+--------+--------+
2 rows in set

-- نورة لم تظهر لأن عمرها 19 (أقل من 20)

3. معامل OR: يكفي تحقق شرط واحد

معامل OR يُرجع الصفوف التي تحقق أي شرط من الشروط المحددة. يكفي أن يتحقق شرط واحد فقط.

جدول الحقيقة لـ OR
الشرط 1 الشرط 2 النتيجة (OR)
TRUE TRUE TRUE
TRUE FALSE TRUE
FALSE TRUE TRUE
FALSE FALSE FALSE
مثال 1: طلاب من الرياض أو جدة
استخدام OR
SELECT name, city FROM students
WHERE city = 'الرياض' OR city = 'جدة';
النتيجة
+-----------+--------+
| name      | city   |
+-----------+--------+
| أحمد      | الرياض | ✓ (الرياض = TRUE)
| فاطمة     | جدة    | ✓ (جدة = TRUE)
| محمد      | الرياض | ✓ (الرياض = TRUE)
| علي       | جدة    | ✓ (جدة = TRUE)
| نورة      | الرياض | ✓ (الرياض = TRUE)
+-----------+--------+
5 rows in set

-- سارة لم تظهر لأنها من مكة (لا الرياض ولا جدة)
مثال 2: طلاب صغار أو متفوقون
شرطان مختلفان
SELECT name, age, grade FROM students
WHERE age < 20 OR grade = 'A';
النتيجة
+-----------+-----+--------+
| name      | age | grade  |
+-----------+-----+--------+
| أحمد      | 20  | A      | ✓ (grade = A)
| فاطمة     | 19  | B      | ✓ (age < 20)
| محمد      | 21  | A      | ✓ (grade = A)
| نورة      | 19  | A      | ✓ (age < 20 OR grade = A)
+-----------+-----+--------+
4 rows in set

4. معامل NOT: عكس الشرط

معامل NOT يعكس نتيجة الشرط. إذا كان الشرط TRUE، يصبح FALSE والعكس.

مثال 1: جميع الطلاب ما عدا طلاب الرياض
استخدام NOT
SELECT name, city FROM students
WHERE NOT city = 'الرياض';
النتيجة
+-----------+--------+
| name      | city   |
+-----------+--------+
| فاطمة     | جدة    |
| سارة      | مكة    |
| علي       | جدة    |
+-----------+--------+
3 rows in set

ملاحظة: NOT city = 'الرياض' مساوٍ لـ city != 'الرياض'

مثال 2: NOT مع شروط معقدة
NOT مع أقواس
SELECT name, age, grade FROM students
WHERE NOT (age < 20 OR grade = 'C');
النتيجة
+-----------+-----+--------+
| name      | age | grade  |
+-----------+-----+--------+
| أحمد      | 20  | A      | ✓ (NOT (FALSE OR FALSE) = TRUE)
| محمد      | 21  | A      | ✓
| علي       | 22  | B      | ✓
+-----------+-----+--------+
3 rows in set

5. دمج AND و OR: أولوية المعاملات

يمكنك دمج AND و OR في نفس الاستعلام. مهم جداً: AND له أولوية أعلى من OR.

قاعدة الأولوية: يتم تقييم AND قبل OR. استخدم الأقواس () لتوضيح الترتيب المطلوب.
مثال: بدون أقواس (قد يكون مربكاً)
بدون أقواس
SELECT name, city, grade FROM students
WHERE city = 'الرياض' OR city = 'جدة' AND grade = 'A';

-- كيف يُقرأ هذا؟
-- (city = 'الرياض') OR ((city = 'جدة') AND (grade = 'A'))
-- AND يُقيّم أولاً!
الحل: استخدام الأقواس للوضوح
مع أقواس (واضح)
-- الطريقة 1: طلاب متفوقون من الرياض أو جدة
SELECT name, city, grade FROM students
WHERE (city = 'الرياض' OR city = 'جدة') AND grade = 'A';

-- النتيجة: أحمد، محمد، نورة (من الرياض بدرجة A فقط)
-- فاطمة وعلي لن يظهروا لأن درجتهم B
النتيجة
+-----------+--------+--------+
| name      | city   | grade  |
+-----------+--------+--------+
| أحمد      | الرياض | A      | ✓
| محمد      | الرياض | A      | ✓
| نورة      | الرياض | A      | ✓
+-----------+--------+--------+
3 rows in set

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

مثال 1: نظام التجارة الإلكترونية
جدول products
+----+------------------+--------+-------+----------+
| id | name             | price  | stock | category |
+----+------------------+--------+-------+----------+
| 1  | لابتوب Dell      | 3500   | 15    | الكترونيات |
| 2  | ماوس لاسلكي      | 50     | 200   | اكسسوارات |
| 3  | شاشة Samsung     | 800    | 25    | الكترونيات |
| 4  | كاميرا Canon     | 2500   | 5     | تصوير    |
+----+------------------+--------+-------+----------+
منتجات غالية أو مخزون منخفض
SELECT name, price, stock FROM products
WHERE price > 1000 OR stock < 10;
النتيجة
+------------------+--------+-------+
| name             | price  | stock |
+------------------+--------+-------+
| لابتوب Dell      | 3500   | 15    | ✓ (price > 1000)
| كاميرا Canon     | 2500   | 5     | ✓ (price > 1000 AND stock < 10)
+------------------+--------+-------+
مثال 2: نظام الموظفين - شروط معقدة
موظفون يستحقون مكافأة
SELECT name, department, salary FROM employees
WHERE (department = 'IT' OR department = 'Sales') 
  AND salary >= 7000;
مثال 3: استبعاد فئات معينة
منتجات ليست إلكترونيات ولا اكسسوارات
SELECT name, category FROM products
WHERE NOT (category = 'الكترونيات' OR category = 'اكسسوارات');

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

1. استخدم الأقواس دائماً عند دمج AND و OR
مقارنة
-- سيء: غامض
WHERE a = 1 OR b = 2 AND c = 3

-- جيد: واضح
WHERE (a = 1 OR b = 2) AND c = 3
-- أو
WHERE a = 1 OR (b = 2 AND c = 3)
2. تذكر أولوية المعاملات

الترتيب من الأعلى إلى الأدنى:

  1. () الأقواس
  2. NOT
  3. AND
  4. OR
3. اختبر الاستعلامات المعقدة خطوة بخطوة

عند كتابة شروط معقدة، اختبر كل جزء على حدة قبل دمجها.

4. استخدم IN بدلاً من OR المتكررة
تحسين الكود
-- سيء: متكرر
WHERE city = 'الرياض' OR city = 'جدة' OR city = 'مكة'

-- جيد: أقصر وأوضح (سنتعلمها لاحقاً)
WHERE city IN ('الرياض', 'جدة', 'مكة')
ملخص الدرس
  • AND: يُرجع TRUE فقط إذا تحقق جميع الشروط
  • OR: يُرجع TRUE إذا تحقق أي شرط من الشروط
  • NOT: يعكس نتيجة الشرط (TRUE ↔ FALSE)
  • الأولوية: () → NOT → AND → OR
  • الأقواس: استخدمها دائماً عند دمج AND و OR للوضوح
  • Best Practice: اختبر الشروط المعقدة خطوة بخطوة

الخطوة التالية: ترتيب النتائج باستخدام ORDER BY في SQL

أكمل رحلتك التعليمية وانتقل إلى الدرس التالي لتعلم ترتيب النتائج باستخدام ORDER BY في وتطوير مهاراتك في قواعد البيانات.

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

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

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

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

انضم الآن