كيفية مطابقة INNER JOIN للصفوف
النموذج الذهني لإقران الصفوف الذي يجعل كل سؤال عن عمليات الربط سهلًا
كيفية مطابقة INNER JOIN للصفوف درس مجاني في Coding Interview Prep على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Coding Interview Prep، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Coding Interview Prep 4 دروس في المجموع.
أول JOIN يسأل عنه المحاورون
عندما يقول المحاور «اربطوا هذين الجدولين»، فهو يقصد غالبًا INNER JOIN. إنه JOIN الافتراضي، كما أنه يكشف ما إذا كنتم تفهمون حقًا كيفية إقران الصفوف.
يمكن اختزال الموضوع كله في جملة واحدة: يفحص INNER JOIN كل زوج ممكن من الصفوف في الجدولين، ثم يُبقي فقط الأزواج التي تحقق شرط ON. وإذا لم يوجد تطابق، يختفي الصف ببساطة من النتيجة.
ثبّتوا هذا النموذج الذهني، وستصبح كل أسئلة JOIN الأصعب أسهل.
جدولان للتفكير فيهما
سنستخدم طوال هذا الدرس جدولين صغيرين. يحتوي customers على بيانات من أجروا الطلبات، بينما يسجل orders كل طلب والعميل الذي ينتمي إليه.
customers(id, name)orders(id, customer_id, amount)
والصلة بينهما هي orders.customer_id = customers.id. وتعَد هذه المساواة شرط الربط الذي تعتمد عليه النتيجة بأكملها.
customers
id | name
1 | Ada
2 | Bob
3 | Cleo -- no orders yet
orders
id | customer_id | amount
10 | 1 | 50
11 | 1 | 20
12 | 2 | 99استعلام INNER JOIN الأساسي
إليكم الاستعلام النموذجي الذي يريد المحاور رؤيته. لاحظوا الأجزاء الثلاثة: الجدولان، وJOIN ... ON الذي يقرن الصفوف، والأعمدة التي تعرضونها.
الكلمة المفتاحية INNER اختيارية في كل قواعد البيانات الرئيسية. فكتابة JOIN وحدها تعني INNER JOIN، لكن التصريح بها صراحةً يوضح القصد ويتجنب الالتباس أثناء مراجعة الشيفرة.
SELECT c.name, o.amount
FROM customers AS c
INNER JOIN orders AS o
ON o.customer_id = c.id;شكل النتيجة
عند تشغيل الاستعلام على بياناتنا النموذجية، تحصلون على ثلاثة صفوف. لدى Ada طلبان، لذلك تظهر مرتين. أما Bob فيظهر مرة واحدة.
تختفي Cleo. فلا يوجد طلب مطابق لها، ولذلك يحذفها INNER JOIN بالكامل. إن التصريح باختفاء الصفوف غير المتطابقة هو أهم ما ينبغي فعله عند مناقشة JOIN في مقابلة.
name | amount
Ada | 50
Ada | 20
Bob | 99النموذج الذهني لإقران الصفوف
تخيلوا أن قاعدة البيانات تنشئ الجداء الديكارتي أولًا: كل عميل مقترن بكل طلب. ومع وجود 3 عملاء و3 طلبات، ينتج عن ذلك 9 أزواج مرشحة.
ثم تطبق شرط ON، وتُبقي فقط الأزواج التي يكون فيها الشرط صحيحًا. ومن بين المرشحين التسعة، ينجح 3 فقط في اجتياز o.customer_id = c.id.
لا تستخدموا هذا الأسلوب في التفكير من أجل الأداء، لكنه النموذج الدقيق الذي يجيب عن كل سؤال من نوع «كم صفًا سيُرجع؟».
تتبّع الأزواج المرشحة
دعونا نتتبّع العملية. يوضح التعليق بعد كل زوج ما إذا كان الشرط صحيحًا.
تبقى الصفوف الثلاثة التي تحمل TRUE فقط ضمن النتيجة. ويفشل كل زوج يتضمن Cleo (id 3)، ولذلك لا تضيف شيئًا.
-- customer.id vs order.customer_id
(Ada=1, ord10 cust=1) -> TRUE keep
(Ada=1, ord11 cust=1) -> TRUE keep
(Ada=1, ord12 cust=2) -> FALSE
(Bob=2, ord10 cust=1) -> FALSE
(Bob=2, ord12 cust=2) -> TRUE keep
(Cleo=3, anything) -> FALSE (no order matches 3)INNER JOIN مستقل عن الترتيب
سؤال شائع: هل يهم أي جدول تضعونه أولًا؟ بالنسبة إلى INNER JOIN، لا. يُرجع الاستعلامان الصفوف نفسها، لأن شرط ON متماثل.
يحق للمحسّن قراءة أي من الجدولين أولًا، بغض النظر عن طريقة كتابتكم للاستعلام. (وهذا لا ينطبق على عمليات LEFT/RIGHT JOIN التي سنتناولها لاحقًا.)
-- These return the same rows
SELECT c.name, o.amount
FROM customers c JOIN orders o ON o.customer_id = c.id;
SELECT c.name, o.amount
FROM orders o JOIN customers c ON c.id = o.customer_id;الأسماء المستعارة للجداول أمر متوقَّع
يريد القائمون على المقابلات أسماءً مستعارة قصيرة وواضحة. قارنوا بين الصيغة المطوَّلة المؤهَّلة بالكامل والصيغة النظيفة التي تستخدم أسماءً مستعارة.
تصبح الأسماء المستعارة إلزامية أيضًا عندما يوجد اسم عمود في كلا الجدولين. سيؤدي اختيار id المجرد هنا إلى ظهور خطأ عمود غامض، لذا يجب كتابة c.id أو o.id.
-- verbose
SELECT customers.name, orders.amount
FROM customers JOIN orders
ON orders.customer_id = customers.id;
-- aliased, preferred
SELECT c.name, o.amount
FROM customers c JOIN orders o
ON o.customer_id = c.id;الربط باستخدام أكثر من عمود
لا يقتصر المسند ON على مساواة واحدة. عندما تُحدَّد العلاقة بواسطة مفتاح مركب، فإنكم تربطون الشروط معًا باستخدام AND.
ينطبق السعر هنا على كل منتج في كل منطقة، لذلك يجب أن يتطابق العمودان معًا. يستخدم القائمون على المقابلات هذا السؤال للتحقق من أنكم لم تحفظوا عمليات الربط ذات العمود الواحد فقط.
SELECT s.units, p.unit_price
FROM sales s
INNER JOIN price_list p
ON p.product_id = s.product_id
AND p.region = s.region;توجد أيضًا عمليات ربط غير تكافئية
يمكن أن يكون شرط ON أي تعبير منطقي، وليس = فقط. تستخدم عملية الربط غير التكافئية النطاقات أو علاقات عدم المساواة. ومن الأمثلة الكلاسيكية تصنيف درجة ضمن نطاق تقدير.
تطابق كل درجة نطاقًا واحدًا يحتويها. إن ذكر أن عمليات الربط لا تقتصر على المساواة طريقة سريعة لإظهار مستوى متقدم من الخبرة.
SELECT s.student, g.grade
FROM scores s
INNER JOIN grades g
ON s.points >= g.min_points
AND s.points <= g.max_points;صيغة JOIN الصريحة مقابل الربط بالفاصلة
ستصادفون صيغة الربط القديمة باستخدام الفاصلة في الشيفرة القديمة وبعض أسئلة المقابلات. هذان الاستعلامان متكافئان في حالة INNER JOIN.
فضّلوا الصيغة الصريحة JOIN ... ON. فمن السهل أن تؤدي صيغة الفاصلة إلى كتابة خاطئة تنتج حاصلًا ديكارتيًا غير مقصود، وذلك عند نسيان WHERE، وهو تحديدًا الخطأ الذي يأمل القائمون على المقابلات اكتشافه.
-- old implicit join
SELECT c.name, o.amount
FROM customers c, orders o
WHERE o.customer_id = c.id;
-- modern explicit join (preferred)
SELECT c.name, o.amount
FROM customers c
JOIN orders o ON o.customer_id = c.id;اختبار سريع
اختبروا الفكرة الأساسية لمطابقة INNER JOIN.
مراجعة: كيفية مطابقة INNER JOIN للصفوف
النقاط التي ينبغي تكرارها في المقابلة:
- يحتفظ INNER JOIN بالأزواج المتطابقة فقط؛ وتختفي الصفوف غير المتطابقة من أي من الجانبين.
- النموذج الذهني: كوِّنوا جميع الأزواج المرشحة، ثم احتفظوا بالأزواج التي يكون فيها مسند ON صحيحًا.
- إنه غير معتمد على الترتيب، كما أن الكلمة المفتاحية
INNERاختيارية. - يمكن أن يستخدم ON مفاتيح مركبة ونطاقات وعلاقات عدم مساواة، وليس
=واحدًا فقط. - استخدموا
JOIN ... ONالصريح مع أسماء مستعارة واضحة لتجنب أخطاء الأعمدة الغامضة والنتائج الديكارتية غير المقصودة.
تعلم Coding Interview Prep مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 90
- الدروس
- 360
الأسئلة الشائعة
هل درس «كيفية مطابقة INNER JOIN للصفوف» مجاني؟
نعم — نص درس «كيفية مطابقة INNER JOIN للصفوف» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Coding Interview Prep، انتقل إلى CoddyKit PRO. تتضمن دورة Coding Interview Prep 4 دروس في المجموع.
ماذا ستتعلم في «كيفية مطابقة INNER JOIN للصفوف»؟
النموذج الذهني لإقران الصفوف الذي يجعل كل سؤال عن عمليات الربط سهلًا تتمرن على Coding Interview Prep مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Coding Interview Prep؟
لا تُشترط خبرة سابقة. Coding Interview Prep على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «كيفية مطابقة INNER JOIN للصفوف»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Coding Interview Prep هذا؟
نعم. كل درس في Coding Interview Prep يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- كيفية مطابقة INNER JOIN للصفوف
- ON مقابل WHERE في عمليات الربط
- توسّع الربط وتضاعف الصفوف
- ربط ثلاثة جداول أو أكثر