في هذا الدرس 6تصفّح المواضيع
تعمل جملة WHERE كبوابة تصفية دقيقة في استعلامات SELECT؛ إذ تمنع إرسال جميع صفوف الجدول عبر الشبكة وتقتصر على السجلات التي تحقق الشرط المحدد.
- موقع التنفيذ المنطقي: يحدد محرك MySQL الجدول عبر
FROMأولاً، ثم يختبر شرطWHEREعلى كل صف مرشح قبل استخراج أعمدةSELECT. - قاعدة القبول المنطقية: تمر فقط الصفوف التي يُعيد شرطها القيمة الصائبة
TRUEالممثلة بالرقم1، بينما تُستبعد الصفوف التي تُعيد0أوNULL.
يساعد وضع شروط دقيقة على الأعمدة المفهرسة محرك InnoDB على الوصول المباشر للسجلات دون مسح الجدول كاملاً.
آلية تصفية الصفوف ومعاملات المقارنة في MySQL 8
-- Filter active employees in department 10
SELECT emp_id, full_name, salary
FROM employees
WHERE dept_id = 10;
تُستخدم معاملات التساوي وعدم التساوي لاختبار تطابق قيمة العمود أو اختلافها عن قيمة ثابتة أو عمود آخر في الصف نفسه.
- التساوي القياسي
=: يختبر التطابق التام للأرقام أو النصوص المحاطة بعلامتي اقتباس مفردتين أو التواريخ. - عدم التساوي
<>و!=: يؤدي المعاملان الوظيفة ذاتها في MySQL، ويُفضّل كتابة<>لكونه المعامل القياسي المعتمد في معيار ISO SQL العالمي.
انتبه إلى أن مقارنة أي قيمة مع NULL باستخدام = أو <> تُعيد دائماً NULL ولا تطابق أي صف.
-- Match paid invoices and exclude archived rows
SELECT invoice_id, client_name, total_usd
FROM invoices
WHERE payment_status = 'paid';
SELECT invoice_id, payment_status
FROM invoices
WHERE payment_status <> 'cancelled';
تتيح معاملات الحدود النسبية تصفية القيم الرقمية والتواريخ والنصوص وفق ترتيبها التصاعدي أو التنازلي.
- الحدود الصارمة
>و<: تستبعد القيمة الحدية نفسها وتكتفي بما هو أكبر أو أصغر منها تماماً. - الحدود الشاملة
>=و<=: تشمل القيمة الحدية المذكورة في الشرط ضمن النتائج المسترجعة.
احرص دائماً على كتابة التواريخ بالصيغة القياسية YYYY-MM-DD لضمان دقة المقارنة الزمنية في جميع إعدادات الخادم.
-- Products priced at or above 250 with low stock
SELECT product_id, title, unit_price, stock_qty
FROM products
WHERE unit_price >= 250.00;
SELECT order_id, created_on
FROM orders
WHERE created_on > '2026-01-01';
تُعيد علامة التساوي العادية = القيمة NULL متى كان أحد طرفي المقارنة فارغاً. يوفر MySQL معامل التساوي الآمن <=> المعروف باسم معامل السفينة الفضائية ليُعيد دائماً 1 أو 0 دون غموض.
- كلا الطرفين فارغ: التعبير
NULL <=> NULLيُعيد1. - أحد الطرفين فقط فارغ: التعبير
100 <=> NULLيُعيد0بدلاً منNULL.
يُعد هذا المعامل مثالياً في الاستعلامات المحضّرة عندما قد يحمل المتغير الممرر قيمة فعلية أو قيمة فارغة NULL.
-- Safe comparison when referral_code may be NULL
SELECT user_id, username, referral_code
FROM users
WHERE referral_code <=> NULL;
SELECT (NULL <=> NULL) AS both_null,
(42 <=> NULL) AS one_null;
يعتمد سلوك مقارنة النصوص داخل جملة WHERE في MySQL على نظام المقارنة النصية Collation المحدد للعمود.
- الوضع الافتراضي غير الحساس لحالة الأحرف
utf8mb4_0900_ai_ci: تعني اللاحقة_ciأن مقارنة'Admin' = 'admin'تُعيد1لتجاهل فرق الأحرف الكبيرة والصغيرة. - المقارنة الحساسة لحالة الأحرف
utf8mb4_0900_as_cs: يمكنك فرض المطابقة الحرفية الدقيقة بإضافةCOLLATE utf8mb4_0900_as_csعند فحص الرموز الحساسة.
تعتمد ترميزات 0900 الحديثة في MySQL 8 خاصية NO PAD التي تعتبر المسافات في نهاية النص جزءاً فعلياً من المقارنة.
-- Force case-sensitive match using MySQL 8 collation
SELECT user_id, username, role_code
FROM users
WHERE role_code COLLATE utf8mb4_0900_as_cs = 'Admin';
يلخّص الجدول التالي جميع معاملات المقارنة الأساسية المستخدمة داخل جملة WHERE في MySQL 8 وسلوك كل منها عند مصادفة القيمة الفارغة NULL:
| المعامل | الوظيفة | النتيجة عند وجود NULL | مثال تطبيقي |
|---|---|---|---|
= | يساوي تماماً | يُعيد NULL (يُستبعد الصف) | price = 99.00 |
<> أو != | لا يساوي | يُعيد NULL (يُستبعد الصف) | status <> 'draft' |
> | أكبر تماماً من | يُعيد NULL (يُستبعد الصف) | qty > 0 |
>= | أكبر من أو يساوي | يُعيد NULL (يُستبعد الصف) | score >= 80 |
< | أصغر تماماً من | يُعيد NULL (يُستبعد الصف) | stock < 5 |
<= | أصغر من أو يساوي | يُعيد NULL (يُستبعد الصف) | age <= 65 |
<=> | التساوي الآمن مع NULL | يُعيد 1 أو 0 دائماً | coupon <=> NULL |
ملخص الدرس: تعلّمت في هذا الدرس آلية عمل جملة WHERE لتصفية الصفوف، واستخدام معاملات التساوي والحدود الرقمية والزمنية، وتوظيف معامل السفينة الفضائية <=> للمقارنة الآمنة مع NULL، وضبط حساسية الأحرف عبر COLLATE.
الخطوة التالية والدرس القادم: ننتقل في الدرس القادم إلى دمج عدة شروط معاً باستخدام المعاملات المنطقية AND و OR و NOT.
-- Audit query combining exact comparison and NULL-safe check
SELECT order_id, customer_id, discount_code, total_amount
FROM orders
WHERE discount_code <=> NULL;
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
أتقنّا في هذا الدرس تصفية السجلات بشرط WHERE ومعاملات المقارنة في MySQL في MySQL 8 مع أمثلة عملية.
الخطوة التالية والدرس القادم
أكمل التدريبات والاختبار التفاعلي أدناه قبل الانتقال إلى الدرس التالي في مسار MySQL.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 WHERE Clause جملة التصفية WHERE
- جملة في لغة SQL تُنفّذ بعد FROM لتصفية سجلات الجدول والاحتفاظ فقط بالصفوف التي يحقق شرطها القيمة الصائبة 1.
- للمراجعة
- 02 Spaceship Operator (<=>) معامل السفينة الفضائية (<=>)
- معامل التساوي الآمن في MySQL الذي يُعيد 1 إذا كان الطرفان NULL ويُعيد 0 إذا كان أحدهما فقط NULL دون إرجاع UNKNOWN.
- للمراجعة
- 03 Predicate الشرط المنطقي (Predicate)
- تعبير مقارن داخل جملة WHERE يُقيَّم لكل صف ليُعيد إما صواب 1 أو خطأ 0 أو غير معروف NULL.
- للمراجعة
- 04 Collation نظام المقارنة النصية (Collation)
- مجموعة القواعد التي تحدد كيفية مقارنة النصوص وترتيبها في MySQL بما في ذلك حساسية الأحرف الكبيرة والصغيرة.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 SQL SQL
- Structured Query Language
- لغة الاستعلامات البنيوية للتعامل مع قواعد البيانات العلائقية
- للمراجعة
- 02 CI CI
- Case Insensitive
- غير حساس لحالة الأحرف الكبيرة والصغيرة في المقارنات النصية
- للمراجعة
- 03 CS CS
- Case Sensitive
- حساس لحالة الأحرف الكبيرة والصغيرة عند مقارنة السلاسل النصية
- للمراجعة
- 04 ISO ISO
- International Organization for Standardization
- المنظمة الدولية للمعايير المعتمدة لصيغ SQL والتواريخ القياسية
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
اكتب استعلام SELECT على جدول orders يعرض العمودين order_id و total_amount للصفوف التي تكون فيها قيمة total_amount أكبر من أو تساوي 500.00.
-
اكتب استعلام SELECT على جدول orders يعرض order_id و coupon_code باستخدام معامل السفينة الفضائية <=> لمطابقة القيمة NULL.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ما الجملة التي ينفذها محرك MySQL مباشرةً قبل تطبيق شرط WHERE؟
يحدد محرك MySQL الجدول المصدر عبر FROM أولاً ثم يختبر شرط WHERE على كل صف قبل استخراج أعمدة SELECT.
ما النتيجة التي يُعيدها التعبير (NULL = NULL) عند استخدام معامل التساوي العادي في MySQL؟
معامل التساوي العادي = يُعيد دائماً NULL عند وجود طرف فارغ، وبالتالي تستبعد جملة WHERE ذلك الصف.
ما النتيجة التي يُعيدها تعبير التساوي الآمن (NULL <=> NULL) في MySQL؟
يعامل المعامل <=> القيمتين الفارغتين NULL كمتطابقتين ويُعيد الرقم 1.
ما المعامل القياسي في معيار ISO SQL المكافئ تماماً للمعامل != في MySQL؟
كلا المعاملين <> و != يفحص عدم التساوي في MySQL، ويُعد <> الصيغة القياسية في ISO SQL.
لماذا يفشل استخدام الاسم المستعار المعرّف في SELECT داخل جملة WHERE؟
في ترتيب التنفيذ المنطقي للاستعلام، تُنفّذ WHERE قبل SELECT فلا تكون الأسماء المستعارة قد أُنشئت بعد.
إلى ماذا تشير اللاحقة _ci في اسم نظام المقارنة utf8mb4_0900_ai_ci؟
ترمز اللاحقة _ci إلى Case Insensitive أي عدم التفريق بين الأحرف الكبيرة والصغيرة أثناء المقارنة.
أي معامل يشمل القيمة الحدية 100 عند تصفية الصفوف التي يكون سعرها 100 فأكثر؟
المعامل >= يشمل القيمة المذكورة 100 بالإضافة إلى جميع القيم الأكبر منها.
ما الصيغة القياسية الموصى بها لكتابة التاريخ داخل شرط WHERE في MySQL؟
يعتمد محرك MySQL الصيغة القياسية 'YYYY-MM-DD' لضمان تفسير التواريخ ومقارنتها بدقة تامة.