0Pricing
SQL Interview Prep · درس

دلالات RIGHT وFULL OUTER JOIN

متى تحتاج إلى كل منهما وكيف تعيد كتابة RIGHT على هيئة LEFT

دلالات RIGHT وFULL OUTER JOIN درس مجاني في SQL Interview Prep على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Interview Prep، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Interview Prep 4 دروس في المجموع.

ما بعد LEFT JOIN

بعد فهم LEFT JOIN، يختبر المحاورون الصورة المعكوسة واتحاد الجانبين: RIGHT JOIN وFULL OUTER JOIN.

  • يحافظ RIGHT JOIN على كل صف من صفوف الجدول الأيمن.
  • يحافظ FULL OUTER JOIN على الصفوف غير المطابقة من كلا الجدولين.

يعرّف هذا الدرس كل نوع بدقة، ويعرض حيلة إعادة الصياغة التي يحبها المحاورون: يمكن تحويل أي RIGHT JOIN إلى LEFT JOIN.

تعريف RIGHT JOIN

يحافظ RIGHT JOIN (أو RIGHT OUTER JOIN) على كل صف من صفوف الجدول الأيمن، أي الجدول المكتوب بعد الكلمة المفتاحية JOIN. وتظهر الصفوف اليمنى غير المطابقة مع قيمة NULL في أعمدة الجدول الأيسر.

إنه الصورة المعكوسة تمامًا لـ LEFT JOIN. فبينما يحافظ LEFT على الجدول المذكور أولًا، يحافظ RIGHT على الجدول المذكور ثانيًا.

SELECT c.name, o.amount
FROM orders o
RIGHT JOIN customers c
  ON o.customer_id = c.id;
-- keeps ALL customers, even those
-- with no order (Carol -> amount NULL)

الجدولان مجددًا

البيانات هي نفسها كما سبق. لا يملك Carol (العميل 3) أي طلب. وتشير جميع صفوف orders هنا إلى عميل موجود، ولذلك لا يوجد أي طلب بلا عميل عندما يكون customers هو الجانب المحفوظ.

-- customers           orders
-- 1 | Alice           10 | 1 | 50
-- 2 | Bob             11 | 1 | 75
-- 3 | Carol           12 | 2 | 20

إعادة كتابة RIGHT بصيغة LEFT

الخلاصة المهمة في المقابلة: نادرًا ما يُستخدم RIGHT JOIN عمليًا، لأنك تستطيع دائمًا قلب ترتيب الجداول واستخدام LEFT JOIN. والاستعلامان أدناه متطابقان منطقيًا.

تحظر أدلة أسلوب كثيرة استخدام RIGHT JOIN بالكامل، لأن القراءة من اليسار إلى اليمين والحفاظ دائمًا على الجدول الأيسر أسهل في التحليل.

-- RIGHT JOIN
SELECT c.name, o.amount
FROM orders o
RIGHT JOIN customers c ON o.customer_id = c.id;

-- Equivalent LEFT JOIN (preferred)
SELECT c.name, o.amount
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id;

تعريف FULL OUTER JOIN

يحافظ FULL OUTER JOIN على الصفوف غير المطابقة من كلا الجدولين. فكّر فيه بوصفه LEFT JOIN وRIGHT JOIN معًا:

  • تظهر الأزواج المطابقة كالمعتاد.
  • الصفوف اليسرى التي لا تجد تطابقًا: تكون أعمدة الجانب الأيمن NULL.
  • الصفوف اليمنى التي لا تجد تطابقًا: تكون أعمدة الجانب الأيسر NULL.

إنه يجيب عن السؤال «اعرض كل شيء من الجانبين، مع محاذاة الصفوف المتطابقة».

SELECT c.name, o.id AS order_id
FROM customers c
FULL OUTER JOIN orders o
  ON o.customer_id = c.id;

متى يتألق FULL OUTER

يُعد FULL OUTER JOIN الخيار الأمثل لـمطابقة البيانات: أي مقارنة مجموعتي بيانات يفترض أن تتطابقا، لكن قد توجد بينهما اختلافات.

تخيّل وجود جدول orders وجدول payments منفصل. يكشف FULL OUTER JOIN على معرّف الطلب الطلبات التي ليس لها دفعة والدفعات التي لا يقابلها طلب مطابق، وذلك في نتيجة واحدة، مع الإشارة إلى الجانب المفقود بقيم NULL.

SELECT o.id AS order_id, p.id AS payment_id
FROM orders o
FULL OUTER JOIN payments p
  ON p.order_id = o.id
WHERE o.id IS NULL OR p.id IS NULL;
-- rows where one side is missing

الوعي باختلافات SQL

قد يختبر المحاوِر قابلية نقل الاستعلامات بين الأنظمة. لا تحتوي MySQL على كلمة مفتاحية FULL OUTER JOIN (حتى الإصدار 8). بينما تدعمها Postgres وSQL Server وOracle.

في MySQL، يمكن محاكاة ذلك بدمج LEFT JOIN وRIGHT JOIN باستخدام UNION (الذي يزيل الصفوف المتطابقة المكررة). إن معرفتكم بهذا الفرق تدل على خبرة عملية حقيقية.

-- FULL OUTER JOIN emulated in MySQL
SELECT c.name, o.id FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
UNION
SELECT c.name, o.id FROM customers c
RIGHT JOIN orders o ON o.customer_id = c.id;

نظرة سريعة على أنواع JOIN الأربعة

احتفظوا بهذا الجدول في ذاكرتكم. تعني كلمة «محفوظة» أن الصفوف غير المتطابقة تبقى مع قيم NULL.

  • INNER JOIN: الصفوف المتطابقة فقط. لا تُحفظ أي جهة.
  • LEFT JOIN: تُحفظ جميع صفوف الجهة اليسرى.
  • RIGHT JOIN: تُحفظ جميع صفوف الجهة اليمنى.
  • FULL OUTER JOIN: تُحفظ الجهتان كلتاهما.

يمكن اختزال كل سؤال في مقابلات outer join إلى اختيار الجهة أو الجهات التي يجب حفظها.

اختيار النوع المناسب

اختاروا نوع JOIN بسؤال أنفسكم: «ما الصفوف غير المتطابقة التي يجب أن أحتفظ بها؟»

  • الاحتفاظ بصفوف الجدول المحرّك أو الرئيسي فقط: LEFT JOIN (ضعوا الجدول الرئيسي أولًا).
  • الحاجة إلى مجموعتي الصفوف غير المتطابقة للمطابقة: FULL OUTER JOIN.
  • إذا كانت الصفوف المتطابقة فقط هي المهمة: INNER JOIN.

نادراً ما تختارون RIGHT JOIN مباشرةً؛ بل تعيدون صياغته على أنه LEFT JOIN.

مثال على المطابقة

استخدموا FULL OUTER JOIN لتحديد حالة كل صف. ويساعدكم CASE، بالاعتماد على نمط قيم NULL، في معرفة الجهة المفقودة؛ وهذا هو استعلام التدقيق التقليدي.

SELECT
  COALESCE(o.id, p.order_id) AS ord,
  CASE
    WHEN p.id IS NULL THEN 'no payment'
    WHEN o.id IS NULL THEN 'orphan payment'
    ELSE 'matched'
  END AS status
FROM orders o
FULL OUTER JOIN payments p ON p.order_id = o.id;

مفهوم خاطئ شائع

يعتقد المرشحون غالبًا أن FULL OUTER JOIN يعيد حاصل الضرب الديكارتي للصفوف غير المتطابقة. لكنه لا يفعل ذلك. تظهر الصفوف غير المتطابقة في كل جهة مرة واحدة بالضبط، مقترنة بقيم NULL، ولا تُضرب أعدادها ببعضها أبدًا.

أما الصفوف المتطابقة فتظل خاضعة لآلية التكرار المعتادة في JOIN، أي صف ناتج واحد لكل زوج متطابق، وفق قاعدة التوسّع نفسها المتبعة في أي JOIN.

تحقق سريع

يطلب منكم أحد المحاوِرين إعادة كتابة استعلام لفريق يحظر استخدام RIGHT JOIN.

مراجعة

يحافظ RIGHT JOIN على الجدول الأيمن، بينما يحافظ FULL OUTER JOIN على الجدولين معًا. ويمكن إعادة كتابة أي RIGHT JOIN على هيئة LEFT JOIN بتبديل ترتيب الجدولين، ولذلك تفضّل الفرق استخدام LEFT.

  • يُعد FULL OUTER مناسبًا لمطابقة مجموعتي بيانات.
  • لا تدعم MySQL FULL OUTER؛ لذا يمكن محاكاته باستخدام LEFT + RIGHT + UNION.
  • اختاروا نوع JOIN بتحديد الصفوف غير المتطابقة التي تريدون الاحتفاظ بها.
  • تظهر الصفوف غير المتطابقة مرة واحدة مع قيم NULL، وليس على شكل حاصل ضرب ديكارتي.

الأسئلة الشائعة

هل درس «دلالات RIGHT وFULL OUTER JOIN» مجاني؟

نعم — نص درس «دلالات RIGHT وFULL OUTER JOIN» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Interview Prep، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Interview Prep 4 دروس في المجموع.

ماذا ستتعلم في «دلالات RIGHT وFULL OUTER JOIN»؟

متى تحتاج إلى كل منهما وكيف تعيد كتابة RIGHT على هيئة LEFT تتمرن على SQL Interview Prep مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ SQL Interview Prep؟

لا تُشترط خبرة سابقة. SQL Interview Prep على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «دلالات RIGHT وFULL OUTER JOIN»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس SQL Interview Prep هذا؟

نعم. كل درس في SQL Interview Prep يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. LEFT JOIN والحفاظ على الصفوف غير المطابقة
  2. دلالات RIGHT وFULL OUTER JOIN
  3. العثور على الصفوف دون تطابق (Anti-Join)
  4. فخ WHERE في الربط الخارجي
← العودة إلى SQL Interview Prep