AzLearn

LEFT JOIN

LEFT JOIN

مفهوم ~18 دقيقة

LEFT JOIN

LEFT JOIN يحتفظ بكل صفوف الجدول الأيسر، ويضيف بيانات من الجدول الأيمن إذا وجدت. إذا لم يوجد تطابق، تكون أعمدة الجدول الأيمن NULL. هذا مفيد عندما تريد العملاء حتى الذين لا يملكون طلبات، أو المنتجات حتى التي لم تُبع.

الفرق بين INNER JOIN وLEFT JOIN قرار في السؤال. هل تريد فقط الصفوف التي لها علاقة؟ أم تريد كل الصفوف من الطرف الأساسي مع معلومات اختيارية؟

مثال عملي

query.sql

Noura ستظهر حتى لو لم تملك طلباً، وorder_id سيكون NULL.

WHERE قد يغير المعنى

إذا وضعت شرطاً على الجدول الأيمن في WHERE, قد تحول LEFT JOIN فعلياً إلى INNER JOIN. أحياناً يجب أن يكون الشرط داخل ON.

ربط معكوس — Anti-join

أحد أقوى استخدامات LEFT JOIN هو إيجاد الصفوف التي لا يوجد لها مقابل في الجدول الآخر: العملاء بلا طلبات، المنتجات بلا مراجعات، الدروس بلا اختبارات.

النمط:

SELECT customers.id, customers.name
FROM customers
LEFT JOIN orders ON orders.customer_id = customers.id
WHERE orders.id IS NULL;

لماذا يعمل؟ LEFT JOIN يحتفظ بكل صفوف customers، ويضع NULL في أعمدة orders عندما لا يوجد طلب مطابق. الشرط WHERE orders.id IS NULL يُبقي فقط هذه الصفوف — أي العملاء الذين لم يطلبوا شيئاً.

البديل هو الاستعلام الفرعي المترابط — correlated subquery:

SELECT id, name
FROM customers
WHERE NOT EXISTS (
  SELECT 1 FROM orders WHERE orders.customer_id = customers.id
);

كلاهما صحيح. نمط LEFT JOIN ... IS NULL أسرع على الجداول الكبيرة في معظم محركات قواعد البيانات. نمط NOT EXISTS أوضح في نية القارئ.

تحدي — Challenge