في هذا الدرس 6تصفّح المواضيع
يربط المعامل المنطقي AND شرطين أو أكثر داخل جملة WHERE، ولا يُرجع الصف إلا إذا تحققت جميع الشروط المرتبطة به وأعادت القيمة الصائبة 1.
- تضييق نطاق النتائج: كل شرط إضافي يُربط عبر
ANDيقلّص عدد السجلات المسترجعة ويزيد دقة التصفية. - التقييم المختصر مع الصفر: إذا كانت نتيجة الشرط الأول خاطئة
0، فإن نتيجةANDالنهائية تكون0فوراً حتى لو كان الشرط الثانيNULL.
عند ربط عدة أعمدة بمعامل AND، يستطيع محرك InnoDB استثمار الفهرس المركّب لتسريع البحث بشكل كبير.
دمج الشروط بالمعاملات المنطقية وأولوية التنفيذ في MySQL 8
-- 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تزيد عدد الصفوف المرشحة للقبول. - التعامل مع القيمة الفارغة: في المنطق الثلاثي، يُعيد التعبير
1 OR NULLالقيمة1لأن أحد الشرطين تحقق بالفعل، بينما يُعيد0 OR NULLالقيمةNULL.
عندما يفحص المعامل OR عمودين مفهرسين مختلفين، يستطيع مُحسِّن MySQL 8 دمج الفهرسين عبر تقنية index_merge.
-- 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 النتيجة المنطقية للشرط الذي يليه؛ فيحوّل الصواب 1 إلى خطأ 0، ويحوّل الخطأ 0 إلى صواب 1.
- عكس المقارنات: كتابة
WHERE NOT (stock_qty = 0)تكافئ منطقياً كتابةWHERE stock_qty <> 0. - سلوك القيمة الفارغة مع النفي: عكس القيمة غير المعروفة يبقى غير معروف؛ أي أن
NOT NULLيُعيدNULL، وبالتالي تُستبعد تلك الصفوف من نتائجWHERE.
في المقارنات البسيطة يُفضّل استخدام معاملات المقارنة المباشرة مثل >= أو <> لكونها أوضح قراءةً.
-- 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;
كما أن عملية الضرب تسبق الجمع في الحساب، تتبع المعاملات المنطقية في 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عليها.
لذلك يجب دائماً مراجعة ترتيب تقييم الشروط المركّبة بدقة قبل اعتمادها في التقارير المالية أو الأمنية.
-- 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;
تضمن إحاطة الشروط البديلة المرتبطة بـ OR داخل أقواس ( ... ) إجبار محرك MySQL على حساب نتيجة القوس كوحدة واحدة قبل تطبيق معامل AND أو NOT الخارجي.
- تحكم دقيق بالنتائج: كتابة
(category = 'Books' OR category = 'Courses') AND is_published = 1تضمن اشتراط النشر على كلا القسمين دون استثناء. - وضوح القراءة والصيانة: حتى عندما تتفق الأولوية الافتراضية مع هدفك، فإن وضع الأقواس يزيل أي التباس لدى المطورين عند مراجعة الاستعلام مستقبلاً.
يمكن تداخل الأقواس لأي مستوى مطلوب لتمثيل قواعد الأعمال المركّبة بأمان تام.
-- 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;
نظراً لاحتمال احتواء الأعمدة على القيمة الفارغة NULL، يعتمد MySQL المنطق الثلاثي (1 صواب، 0 خطأ، NULL غير معروف). يلخّص الجدول التالي نتائج جميع الحالات:
| الطرف الأول A | الطرف الثاني B | نتيجة A AND B | نتيجة A OR B | نتيجة NOT A |
|---|---|---|---|---|
1 (صواب) | 1 (صواب) | 1 | 1 | 0 |
1 (صواب) | 0 (خطأ) | 0 | 1 | 0 |
1 (صواب) | NULL (غير معروف) | NULL | 1 | 0 |
0 (خطأ) | 0 (خطأ) | 0 | 0 | 1 |
0 (خطأ) | NULL (غير معروف) | 0 | NULL | 1 |
NULL (غير معروف) | NULL (غير معروف) | NULL | NULL | NULL |
ملخص الدرس: تعلّمت في هذا الدرس دمج الشروط عبر AND و OR و NOT، وأولوية تنفيذ AND قبل OR، وضبط التجميع المنطقي بالأقواس، بالإضافة إلى جدول الصواب الثلاثي مع NULL.
الخطوة التالية والدرس القادم: سنتعلّم في الدرس القادم اختصار سلاسل المقارنات الطويلة والنطاقات باستخدام معاملي IN و BETWEEN.
-- 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
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 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
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 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 القياسية
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
اكتب استعلام SELECT على جدول employees يعرض emp_id و full_name و salary للموظفين الذين يعملون في القسم dept_id = 30 وراتبهم salary >= 5000.
-
اكتب استعلام SELECT على جدول products يعرض product_id و price للمنتجات التي تنتمي إلى الفئة 'Laptops' أو 'Tablets'، مع اشتراط أن تكون الكمية stock_qty > 0.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ما الترتيب الصحيح لأولوية تنفيذ المعاملات المنطقية في MySQL من الأعلى إلى الأدنى؟
في لغة SQL يمتلك المعامل NOT أعلى أولوية، يليه المعامل AND، وأخيراً المعامل OR ما لم تُستخدم الأقواس.
كيف يفسّر محرك MySQL الشرط WHERE a = 1 OR b = 1 AND c = 1 عند عدم كتابة أي أقواس؟
لأن المعامل AND يمتلك أولوية أعلى من OR، يجمع المحرك الشرطين b = 1 AND c = 1 معاً أولاً.
ما النتيجة التي يُعيدها التعبير (0 AND NULL) في المنطق الثلاثي داخل MySQL؟
بما أن أحد طرفي AND يساوي 0 (خطأ)، يستحيل أن يتحقق الشرطان معاً لذا تكون النتيجة المؤكدة 0.
ما النتيجة التي يُعيدها التعبير (1 OR NULL) في المنطق الثلاثي داخل MySQL؟
بما أن أحد طرفي OR يساوي 1 (صواب)، يتحقق شرط التخيير وتكون النتيجة النهائية 1.
ما النتيجة التي يُعيدها التعبير (NOT NULL) في MySQL؟
نفي القيمة غير المعروفة NULL يظل غير معروف فيُعيد NULL.
لماذا يجب الالتزام بكتابة الكلمة المفتاحية OR بدلاً من الرمز || في استعلامات MySQL؟
في معيار SQL القياسي وعند تفعيل PIPES_AS_CONCAT يُستخدم الرمز || لدمج النصوص وليس للتخيير المنطقي.
ما النتيجة التي يُعيدها التعبير (1 AND NULL) في MySQL؟
عندما يكون الطرف الأول 1 والطرف الثاني غير معروف NULL، تتوقف النتيجة على الطرف المجهول فتُعيد NULL.
أي استعلام يرشّح بشكل صحيح المستخدمين النشطين الذين ينتمون إلى المستوى 2 أو المستوى 3؟
تحرص الأقواس حول (tier = 2 OR tier = 3) على تطبيق شرط النشاط is_active = 1 على كلا المستويين.