انتقل إلى محتوى الدرس
الدرس 26
دورة MySQL

دمج الشروط بالمعاملات المنطقية AND و OR و NOT في MySQLMySQL Logical Operators AND OR and NOT

تعلّم دمج الشروط بالمعاملات المنطقية AND و OR و NOT في MySQL بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
أقسام الدرس
6
الأمثلة
6
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
7
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع
اشترط تحقق عدة شروط معاً في الصف الواحد باستخدام المعامل المنطقي AND.

يربط المعامل المنطقي AND شرطين أو أكثر داخل جملة WHERE، ولا يُرجع الصف إلا إذا تحققت جميع الشروط المرتبطة به وأعادت القيمة الصائبة 1.

  • تضييق نطاق النتائج: كل شرط إضافي يُربط عبر AND يقلّص عدد السجلات المسترجعة ويزيد دقة التصفية.
  • التقييم المختصر مع الصفر: إذا كانت نتيجة الشرط الأول خاطئة 0، فإن نتيجة AND النهائية تكون 0 فوراً حتى لو كان الشرط الثاني NULL.

عند ربط عدة أعمدة بمعامل AND، يستطيع محرك InnoDB استثمار الفهرس المركّب لتسريع البحث بشكل كبير.

دمج الشروط بالمعاملات المنطقية وأولوية التنفيذ في MySQL 8

ترتيب الأولوية القياسي: الأقواس أولاً ثم NOT ثم AND وأخيراً OR وفق المنطق الثلاثي مع NULL
مخطط توضيحي لدرس دمج الشروط بالمعاملات المنطقية AND و OR و NOT في MySQL
مخطط توضيحي لدرس دمج الشروط بالمعاملات المنطقية AND و OR و NOT في MySQL
SQL
-- Active employees in department 20 earning at least 4000
SELECT emp_id, full_name, dept_id, salary
FROM employees
WHERE dept_id = 20
  AND is_active = 1
  AND salary >= 4000.00;
استرجع الصفوف التي تحقق شرطاً واحداً على الأقل من عدة بدائل باستخدام المعامل OR.

يختبر المعامل المنطقي OR عدة شروط بديلة، ويكفي أن يحقق الصف شرطاً واحداً منها فقط ليُعاد ضمن نتائج الاستعلام.

  • توسيع دائرة البحث: إضافة فرع جديد عبر OR تزيد عدد الصفوف المرشحة للقبول.
  • التعامل مع القيمة الفارغة: في المنطق الثلاثي، يُعيد التعبير 1 OR NULL القيمة 1 لأن أحد الشرطين تحقق بالفعل، بينما يُعيد 0 OR NULL القيمة NULL.

عندما يفحص المعامل OR عمودين مفهرسين مختلفين، يستطيع مُحسِّن MySQL 8 دمج الفهرسين عبر تقنية index_merge.

SQL
-- Orders that are urgent or exceed 1000 USD
SELECT order_id, customer_id, priority, total_usd
FROM orders
WHERE priority = 'urgent'
   OR total_usd >= 1000.00;
اعكس القيمة المنطقية للشروط باستخدام NOT وافهم لماذا تبقى نتيجة NOT NULL غير معروفة.

يعكس المعامل الأحادي NOT النتيجة المنطقية للشرط الذي يليه؛ فيحوّل الصواب 1 إلى خطأ 0، ويحوّل الخطأ 0 إلى صواب 1.

  • عكس المقارنات: كتابة WHERE NOT (stock_qty = 0) تكافئ منطقياً كتابة WHERE stock_qty <> 0.
  • سلوك القيمة الفارغة مع النفي: عكس القيمة غير المعروفة يبقى غير معروف؛ أي أن NOT NULL يُعيد NULL، وبالتالي تُستبعد تلك الصفوف من نتائج WHERE.

في المقارنات البسيطة يُفضّل استخدام معاملات المقارنة المباشرة مثل >= أو <> لكونها أوضح قراءةً.

SQL
-- Exclude suspended accounts using NOT
SELECT user_id, username, account_state
FROM users
WHERE NOT (account_state = 'suspended');

SELECT (NOT 1) AS neg_true,
       (NOT 0) AS neg_false,
       (NOT NULL) AS neg_null;
تجنّب أخطاء التصفية الشائعة بفهم أن MySQL ينفذ NOT أولاً ثم AND وأخيراً OR.

كما أن عملية الضرب تسبق الجمع في الحساب، تتبع المعاملات المنطقية في SQL تسلسلاً صارماً للأولوية: يُنفَّذ NOT أولاً، يليه AND، وأخيراً OR.

  • التجميع الضمني التلقائي: يفسّر محرك MySQL العبارة cond_a OR cond_b AND cond_c تلقائياً على أنها cond_a OR (cond_b AND cond_c).
  • خطر تسرب السجلات: نسيان أولوية AND قبل OR يؤدي غالباً إلى إرجاع صفوف غير مقصودة بمجرد تحقق طرف OR الأول دون تطبيق شرط AND عليها.

لذلك يجب دائماً مراجعة ترتيب تقييم الشروط المركّبة بدقة قبل اعتمادها في التقارير المالية أو الأمنية.

SQL
-- Watch how AND binds tighter than OR without parentheses
SELECT product_id, category, price, is_published
FROM products
WHERE category = 'Books'
   OR category = 'Courses' AND is_published = 1;
استخدم الأقواس الصريحة (col) للتحكم في أولوية تنفيذ الشروط وجعل استعلامات WHERE واضحة وخالية من اللبس.

تضمن إحاطة الشروط البديلة المرتبطة بـ OR داخل أقواس ( ... ) إجبار محرك MySQL على حساب نتيجة القوس كوحدة واحدة قبل تطبيق معامل AND أو NOT الخارجي.

  • تحكم دقيق بالنتائج: كتابة (category = 'Books' OR category = 'Courses') AND is_published = 1 تضمن اشتراط النشر على كلا القسمين دون استثناء.
  • وضوح القراءة والصيانة: حتى عندما تتفق الأولوية الافتراضية مع هدفك، فإن وضع الأقواس يزيل أي التباس لدى المطورين عند مراجعة الاستعلام مستقبلاً.

يمكن تداخل الأقواس لأي مستوى مطلوب لتمثيل قواعد الأعمال المركّبة بأمان تام.

SQL
-- Parentheses enforce is_published = 1 on both categories
SELECT product_id, category, price, is_published
FROM products
WHERE (category = 'Books' OR category = 'Courses')
  AND is_published = 1
  AND price <= 200.00;
مرجع شامل لجدول الصواب الثلاثي (1 و 0 و NULL) للمعاملات المنطقية AND و OR و NOT في MySQL 8.

نظراً لاحتمال احتواء الأعمدة على القيمة الفارغة NULL، يعتمد MySQL المنطق الثلاثي (1 صواب، 0 خطأ، NULL غير معروف). يلخّص الجدول التالي نتائج جميع الحالات:

الطرف الأول Aالطرف الثاني Bنتيجة A AND Bنتيجة A OR Bنتيجة NOT A
1 (صواب)1 (صواب)110
1 (صواب)0 (خطأ)010
1 (صواب)NULL (غير معروف)NULL10
0 (خطأ)0 (خطأ)001
0 (خطأ)NULL (غير معروف)0NULL1
NULL (غير معروف)NULL (غير معروف)NULLNULLNULL

ملخص الدرس: تعلّمت في هذا الدرس دمج الشروط عبر AND و OR و NOT، وأولوية تنفيذ AND قبل OR، وضبط التجميع المنطقي بالأقواس، بالإضافة إلى جدول الصواب الثلاثي مع NULL.
الخطوة التالية والدرس القادم: سنتعلّم في الدرس القادم اختصار سلاسل المقارنات الطويلة والنطاقات باستخدام معاملي IN و BETWEEN.

SQL
-- Verify three-valued logic directly in MySQL 8
SELECT (1 AND NULL) AS true_and_null,
       (0 AND NULL) AS false_and_null,
       (1 OR NULL)  AS true_or_null,
       (0 OR NULL)  AS false_or_null;
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

أتقنّا في هذا الدرس دمج الشروط بالمعاملات المنطقية AND و OR و NOT في MySQL في MySQL 8 مع أمثلة عملية.

الخطوة التالية والدرس القادم

أكمل التدريبات والاختبار التفاعلي أدناه قبل الانتقال إلى الدرس التالي في مسار MySQL.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Three-Valued Logic (3VL) المنطق الثلاثي (Three-Valued Logic)
النظام المنطقي في SQL الذي يعتمد ثلاث قيم: صواب 1، وخطأ 0، وغير معروف NULL.
للمراجعة
02 Operator Precedence أولوية تنفيذ المعاملات
القاعدة التي تحدد ترتيب تقييم المعاملات عند غياب الأقواس حيث يُنفّذ NOT ثم AND ثم OR.
للمراجعة
03 Logical Conjunction (AND) العطف المنطقي (AND)
معامل منطقي ثنائي يُعيد 1 فقط عندما يحقق كلا طرفيه القيمة الصائبة 1.
للمراجعة
04 Logical Disjunction (OR) التخيير المنطقي (OR)
معامل منطقي ثنائي يُعيد 1 متى كان أحد طرفيه على الأقل مساوياً للقيمة الصائبة 1.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 3VL 3VL
Three-Valued Logic
المنطق الثلاثي في SQL الذي يشمل الصواب والخطأ والقيمة غير المعروفة NULL
للمراجعة
02 BOOL BOOL
Boolean Expression
تعبير منطقي يُعيد قيمة رقمية 1 أو 0 أو NULL في MySQL
للمراجعة
03 ISO ISO
International Organization for Standardization
المنظمة الدولية للمعايير المحددة لقواعد أولوية المعاملات المنطقية في SQL
للمراجعة
04 ANSI ANSI
American National Standards Institute
المعهد الوطني الأمريكي للمعايير المنظم لأوضاع تشغيل SQL القياسية
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. اكتب استعلام SELECT على جدول employees يعرض emp_id و full_name و salary للموظفين الذين يعملون في القسم dept_id = 30 وراتبهم salary >= 5000.

  2. اكتب استعلام SELECT على جدول products يعرض product_id و price للمنتجات التي تنتمي إلى الفئة 'Laptops' أو 'Tablets'، مع اشتراط أن تكون الكمية stock_qty > 0.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 1أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

ما الترتيب الصحيح لأولوية تنفيذ المعاملات المنطقية في MySQL من الأعلى إلى الأدنى؟

في لغة SQL يمتلك المعامل NOT أعلى أولوية، يليه المعامل AND، وأخيراً المعامل OR ما لم تُستخدم الأقواس.

02

كيف يفسّر محرك MySQL الشرط WHERE a = 1 OR b = 1 AND c = 1 عند عدم كتابة أي أقواس؟

لأن المعامل AND يمتلك أولوية أعلى من OR، يجمع المحرك الشرطين b = 1 AND c = 1 معاً أولاً.

03

ما النتيجة التي يُعيدها التعبير (0 AND NULL) في المنطق الثلاثي داخل MySQL؟

بما أن أحد طرفي AND يساوي 0 (خطأ)، يستحيل أن يتحقق الشرطان معاً لذا تكون النتيجة المؤكدة 0.

04

ما النتيجة التي يُعيدها التعبير (1 OR NULL) في المنطق الثلاثي داخل MySQL؟

بما أن أحد طرفي OR يساوي 1 (صواب)، يتحقق شرط التخيير وتكون النتيجة النهائية 1.

05

ما النتيجة التي يُعيدها التعبير (NOT NULL) في MySQL؟

نفي القيمة غير المعروفة NULL يظل غير معروف فيُعيد NULL.

06

لماذا يجب الالتزام بكتابة الكلمة المفتاحية OR بدلاً من الرمز || في استعلامات MySQL؟

في معيار SQL القياسي وعند تفعيل PIPES_AS_CONCAT يُستخدم الرمز || لدمج النصوص وليس للتخيير المنطقي.

07

ما النتيجة التي يُعيدها التعبير (1 AND NULL) في MySQL؟

عندما يكون الطرف الأول 1 والطرف الثاني غير معروف NULL، تتوقف النتيجة على الطرف المجهول فتُعيد NULL.

08

أي استعلام يرشّح بشكل صحيح المستخدمين النشطين الذين ينتمون إلى المستوى 2 أو المستوى 3؟

تحرص الأقواس حول (tier = 2 OR tier = 3) على تطبيق شرط النشاط is_active = 1 على كلا المستويين.