كيف أحافظ على جميع البلدان عند ربطها بالعملاء والطلبات؟

متوسطقراءة دقيقةآخر تحديث 3 أكتوبر 2026

SQL قواعد البيانات

الإجابة

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

استخدام ربط داخلي في الخطوة الثانية قد يستبعد بلدانا حافظت عليها الخطوة الأولى. فالبلد الذي لا يملك عميلا ينتج أعمدة عميل فارغة، وهذه الأعمدة لا تجد طلبا مطابقا في الربط الداخلي اللاحق. كذلك قد يختفي العميل الذي لا يملك طلبا، رغم أن وجوده كان مقبولا في العلاقة الأولى.

مثال

SELECT co.id, c.id AS customer_id, o.id AS order_id
FROM countries AS co
LEFT JOIN customers AS c ON c.country_id = co.id
LEFT JOIN orders AS o ON o.customer_id = c.id;

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

باختصار: حافظ على اختيارية العلاقات في جميع خطوات السلسلة عندما يجب ألا تختفي صفوف الجدول الأساسي.

هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.

اختبر فهمك

أي تعديل يحافظ على جميع البلدان، بما فيها التي لا تملك عملاء أو طلبات، دون إضافة WHERE؟

SELECT co.id, c.id, o.id
FROM countries AS co
LEFT JOIN customers AS c ON c.country_id = co.id
INNER JOIN orders AS o ON o.customer_id = c.id;