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

ON vs WHERE Join Condition شرط الربط ON مقابل WHERE

تعلّم الربط الخارجي LEFT JOIN و RIGHT JOIN في MySQL بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
1 صفوف تعليمية
MySQL
7 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

في استعلامات LEFT JOIN، يختلف سلوك الاستعلام جذرياً بحسب موضع كتابة شرط التصفية الخاص بأعمدة الجدول الأيمن بين جملة ON وجملة WHERE:

  • وضع الشرط داخل ON (AND o.status = 'paid'): يُطبَّق الشرط أثناء عملية المطابقة؛ فيبقى جميع المستخدمين في النتيجة، وتُعرض طلباتهم المدفوعة فقط أو NULL إن لم توجد.
  • وضع الشرط داخل WHERE (WHERE o.status = 'paid'): يُطبَّق الشرط بعد انتهاء الربط؛ وبما أن مقارنة NULL = 'paid' لا تتحقق، يتم حذف جميع المستخدمين غير المرتبطين، مما يحوّل LEFT JOIN بالخطأ إلى INNER JOIN!
SQL
-- Filter right-table rows inside ON to preserve all left rows
SELECT
  u.user_id,
  u.full_name,
  o.order_id,
  o.total_amount
FROM users AS u
LEFT JOIN orders AS o
  ON u.user_id = o.user_id
  AND o.status = 'paid';