اختيار نوع الربط المناسب
إطار لاتخاذ القرار لاختيار الربط الصحيح من مسألة وصفية
اختيار نوع الربط المناسب درس مجاني في Coding Interview Prep على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Coding Interview Prep، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Coding Interview Prep 4 دروس في المجموع.
اختيار نوع الربط انطلاقًا من مسألة وصفية
إن أهم مهارة في الربط خلال المقابلة ليست الصياغة، بل ترجمة متطلب مكتوب بالإنجليزية البسيطة إلى نوع الربط الصحيح. يعرف معظم المرشحين آلية عمل كل نوع من أنواع الربط، لكنهم يتوقفون عن التفكير عندما يُطلب منهم اختيار أحدها تحت الضغط.
يمنحك هذا الدرس إطارًا متكررًا لاتخاذ القرار، حتى تتمكن من تحديد نوع الربط الصحيح خلال ثوانٍ.
السؤال الأساسي: أي صفوف يجب أن تبقى؟
يمكن اختزال كل اختيار لنوع الربط في سؤال واحد: أي صفوف غير متطابقة من أي جانب تحتاج إلى الاحتفاظ بها؟
- الاحتفاظ بالصفوف المتطابقة فقط من الجانبين:
INNER JOIN. - الاحتفاظ بكل صفوف الجانب الأيسر، سواء تطابقت أم لا:
LEFT JOIN. - الاحتفاظ بكل الصفوف من الجانبين:
FULL OUTER JOIN. - الاحتفاظ بكل التركيبات الممكنة:
CROSS JOIN.
حدد أولًا ما يجب أن يبقى؛ وسيتحدد نوع الربط تلقائيًا.
إشارات تدل على INNER JOIN
عبارات مثل «العملاء الذين أجروا طلبًا»، أو «المنتجات التي لها مراجعات»، أو «الطلبات مع عملائها» تعني جميعًا ضرورة وجود تطابق على الجانبين. وهذا هو INNER JOIN.
إذا كان إسقاط الصفوف غير المتطابقة مقبولًا أو مطلوبًا، فإن الربط الداخلي هو الخيار الافتراضي والأكثر كفاءة.
SELECT c.name, o.order_id
FROM customers c
JOIN orders o ON o.customer_id = c.id;إشارات تدل على LEFT JOIN
عبارات مثل «كل العملاء، بمن فيهم من ليس لديهم طلبات»، أو «اعرض كل منتج وعدد مراجعاته (صفرًا إن لم توجد مراجعات)» تعني ضرورة الاحتفاظ بجدول الجانب الأيسر بغض النظر عن وجود تطابقات. وهذا هو LEFT JOIN.
الكلمات الدالة هي «كل» و«بمن فيهم من ليس لديهم» و«حتى إن لم يوجد أي منها».
SELECT c.name, COUNT(o.order_id) AS orders
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.id, c.name;إشارات تدل على الربط المضاد
عبارات مثل «العملاء الذين لم يجروا أي طلب على الإطلاق»، أو «المنتجات التي لا مبيعات لها»، أو «الموظفون الذين ليس لديهم مدير» تطلب الصفوف التي لا يوجد لها تطابق. وهذا هو الربط المضاد: LEFT JOIN مع WHERE right_key IS NULL (أو NOT EXISTS).
الكلمات المفتاحية هي «أبدًا» أو «لا» أو «من دون».
SELECT c.name
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
WHERE o.order_id IS NULL;إشارات تدل على FULL OUTER JOIN
عبارات مثل «طابق قائمتين واعرض الإدخالات المفقودة من أي من الجانبين»، أو «قارن حسابات الشهر الماضي بحسابات هذا الشهر، مع تحديد الحسابات الجديدة وتلك التي اختفت» تتطلب الاحتفاظ بالصفوف غير المتطابقة من كلا الجدولين. وهذا هو FULL OUTER JOIN.
تُعد مسائل المطابقة واكتشاف الفروقات الحالة المعتادة التي تستدعي هذا النوع.
SELECT a.id, b.id
FROM last_month a
FULL OUTER JOIN this_month b ON a.id = b.id
WHERE a.id IS NULL OR b.id IS NULL;إشارات تدل على CROSS JOIN
عبارات مثل «كل مقاس مع كل لون»، أو «صف واحد لكل متجر ولكل يوم حتى عند عدم وجود مبيعات»، أو «كل التركيبات الممكنة» تشير إلى CROSS JOIN.
والإشارة الدالة هي «كل ... مع كل» أو «كل التركيبات»، حيث لا يوجد شرط تطابق بين المجموعتين.
SELECT s.size, c.color
FROM sizes s
CROSS JOIN colors c;إشارات تدل على الربط الذاتي
العبارات التي تربط صفًا بـ صف آخر في الجدول نفسه، مثل «كل موظف ومديره» أو «أزواج المستخدمين في المدينة نفسها» أو «العثور على عناوين البريد الإلكتروني المكررة»، تشير إلى الربط الذاتي.
والدليل هو أن كيانًا واحدًا يشير إلى كيان آخر من النوع نفسه أو تتم مقارنته به.
SELECT e.name, m.name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;ترجمة تطبيقية
المطلوب: «اعرض كل منتج وعدد مرات طلبه في الشهر الماضي، بما في ذلك المنتجات التي لم تُطلب قط».
فكّك المطلوب: تعني عبارتا «كل منتج» و«بما في ذلك ما لم يُطلب قط» ضرورة الاحتفاظ بكل صفوف المنتجات، لذا نستخدم LEFT JOIN لربط المنتجات بالطلبات، ثم نطبّق COUNT على جانب الطلبات (فتكون النتيجة 0 للمنتجات غير المتطابقة لأن COUNT يتجاهل NULL).
SELECT p.name, COUNT(o.order_id) AS times_ordered
FROM products p
LEFT JOIN orders o
ON o.product_id = p.id
AND o.order_date >= DATE '2024-05-01'
GROUP BY p.id, p.name;خطأ شائع: التصفية في ON أم WHERE
في الاستعلام السابق يوجد شرط التاريخ في جملة ON، وليس في WHERE. وهذا يحافظ على المنتجات التي ليس لها أي طلبات مطابقة.
إذا نقلت order_date >= ... إلى WHERE، فسيؤدي ذلك إلى إسقاط صفوف NULL الخاصة بالمنتجات غير المتطابقة، وتحويل LEFT JOIN بصمت إلى INNER JOIN، وبالتالي إسقاط المنتجات التي طلب السؤال الاحتفاظ بها.
-- WRONG: WHERE on the outer table removes unmatched products
-- ...
-- LEFT JOIN orders o ON o.product_id = p.id
-- WHERE o.order_date >= '2024-05-01' <-- becomes an inner joinإطار اتخاذ القرار
مرّر أي مسألة وصفية عن الربط عبر قائمة التحقق التالية:
- هل يرتبط الجدول نفسه بنفسه؟ -> SELF JOIN (وفكّر في CTE递归 إذا كان العمق غير محدود).
- هل المطلوب كل التركيبات من دون شرط؟ -> CROSS JOIN.
- هل المطلوب الصفوف المتطابقة فقط؟ -> INNER JOIN.
- هل يجب الاحتفاظ بكل صفوف أحد الجانبين؟ -> LEFT JOIN.
- هل يجب الاحتفاظ بالصفوف غير المتطابقة من الجانبين؟ -> FULL OUTER JOIN.
- هل المطلوب صفوف بلا تطابق؟ -> الربط المضاد (LEFT JOIN + IS NULL).
اختبار سريع
طبّق إطار اتخاذ القرار على مسألة وصفية.
مراجعة: اختيار نوع الربط الصحيح
أهم النقاط:
- ابدأ كل قرار بشأن الربط بالسؤال: أي صفوف غير متطابقة يجب أن تبقى؟
- اربط الكلمات الدالة بالأنواع المناسبة: «الكل/بما في ذلك» -> LEFT، و«أبدًا/لا» -> الربط المضاد، و«كل ... مع كل» -> CROSS، و«كل X وX الخاص به» -> SELF، والمطابقة واكتشاف الفروقات -> FULL OUTER.
- ضع شروط التصفية الخاصة بالربط الخارجي في جملة
ON؛ فقد تؤدي التصفية فيWHEREإلى تحويلLEFT JOINبصمت إلىINNER JOIN. - عبّر عن إطار اتخاذ القرار شفهيًا في المقابلات؛ فهذا يُظهر قدرتك على الاستدلال، لا مجرد الحفظ.
الأسئلة الشائعة
هل درس «اختيار نوع الربط المناسب» مجاني؟
نعم — نص درس «اختيار نوع الربط المناسب» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Coding Interview Prep، انتقل إلى CoddyKit PRO. تتضمن دورة Coding Interview Prep 4 دروس في المجموع.
ماذا ستتعلم في «اختيار نوع الربط المناسب»؟
إطار لاتخاذ القرار لاختيار الربط الصحيح من مسألة وصفية تتمرن على Coding Interview Prep مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Coding Interview Prep؟
لا تُشترط خبرة سابقة. Coding Interview Prep على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «اختيار نوع الربط المناسب»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Coding Interview Prep هذا؟
نعم. كل درس في Coding Interview Prep يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- CROSS JOIN والجداءات الديكارتية
- SELF JOIN للتسلسلات الهرمية
- مقارنة الصفوف داخل جدول واحد
- اختيار نوع الربط المناسب