أنواع الربط في SQL: الفرق بين INNER JOIN وOUTER JOIN مع أمثلة عملية

دقائق القراءة: 6

مقدمة: لماذا نحتاج إلى JOIN في SQL؟

في قواعد البيانات العلائقية، من الأفضل تخزين كل معلومة مرة واحدة فقط لتجنّب التكرار وتعارض البيانات. لكن عملياً، غالباً ما تكون المعلومات المرتبطة موزعة على أكثر من جدول. هنا تظهر أهمية جملة JOIN في SQL، إذ تتيح لك دمج البيانات المرتبطة من عدة جداول في نتيجة واحدة قابلة للتحليل والاستخدام.

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

شرح مفهوم الربط بين الجداول في SQL ضمن قواعد البيانات العلائقية

ما هو JOIN في SQL؟

المعامل JOIN هو أداة تُستخدم لدمج الصفوف من جدولين أو أكثر بناءً على شرط ارتباط معيّن. هذا الشرط يُكتب عادة باستخدام الكلمة ON لتحديد الأعمدة المرتبطة بين الجداول.

تنقسم أنواع الربط غالباً إلى فئتين رئيسيتين:

  • INNER JOIN
  • OUTER JOIN

الفرق الجوهري بينهما هو أن INNER JOIN يعرض فقط البيانات المشتركة بين الجدولين، بينما OUTER JOIN يمكنه الاحتفاظ أيضاً بالبيانات غير المرتبطة من أحد الجدولين أو كليهما، بحسب النوع المستخدم.

كيف يعمل INNER JOIN؟

يُستخدم INNER JOIN عندما تريد إظهار الصفوف التي لها تطابق فعلي في كلا الجدولين فقط. بمعنى آخر، إذا لم توجد علاقة بين صف في الجدول الأول وصف في الجدول الثاني، فلن يظهر هذا الصف في النتائج.

إذا تخيلت الجدولين على شكل مخطط تقاطعي، فإن نتيجة INNER JOIN تمثل منطقة التقاطع فقط.

مخطط يوضح منطقة التقاطع في INNER JOIN داخل SQL

صيغة INNER JOIN

SELECT *
FROM table1
JOIN table2
ON relation;

في هذا النوع من الربط، تُعرض فقط الصفوف التي تحقق شرط العلاقة المحدد في ON.

ما هو OUTER JOIN في SQL؟

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

تنقسم أنواع OUTER JOIN إلى ثلاثة أنواع رئيسية:

  • LEFT JOIN
  • RIGHT JOIN
  • FULL JOIN

عندما لا توجد قيمة مقابلة في أحد الجداول، يتم ملء الحقل الناتج بالقيمة NULL.

ملاحظة مهمة: النوع LEFT JOIN هو الأكثر دعماً في معظم أنظمة SQL، بينما قد لا يتوفر RIGHT JOIN أو FULL JOIN في بعض المحركات أو الإصدارات.

شرح LEFT OUTER JOIN

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

مخطط يوضح LEFT OUTER JOIN واحتفاظه بجميع صفوف الجدول الأيسر

صيغة LEFT JOIN

SELECT columns
FROM table1
LEFT JOIN table2
ON relation;

شرح RIGHT OUTER JOIN

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

مخطط يوضح RIGHT OUTER JOIN واحتفاظه بجميع صفوف الجدول الأيمن

صيغة RIGHT JOIN

SELECT columns
FROM table1
RIGHT JOIN table2
ON relation;

شرح FULL OUTER JOIN

يمكن اعتبار FULL JOIN مزيجاً بين LEFT JOIN وRIGHT JOIN. فهو يحتفظ بكل الصفوف من الجدولين معاً، سواء وُجد تطابق أم لا. وعند غياب البيانات المقابلة من أحد الجانبين، يتم تعويضها بالقيمة NULL.

مخطط يوضح FULL OUTER JOIN واحتفاظه بجميع صفوف الجدولين

صيغة FULL JOIN

SELECT columns
FROM table1
FULL JOIN table2
ON relation;

مثال عملي على أنواع JOIN في SQL

لنفترض أن لدينا قاعدة بيانات لعيادة بيطرية. يمكن أن تحتوي على جدول باسم pets لتخزين بيانات الحيوانات الأليفة، وجدول باسم owners لتخزين بيانات المالكين. وبما أن المالك الواحد قد يمتلك أكثر من حيوان أليف، فإن جدول pets يحتوي على العمود owner_id الذي يشير إلى العمود id في جدول owners.

بيانات جدول pets

id name age owner_id
1 Fido 7 1
2 Missy 3 1
3 Sissy 10 2
4 Copper 1 3
5 Hopper 2 0

بيانات جدول owners

id name phone_number
1 Johnny 4567823
2 Olly 7486513
3 Ilenia 3481365
4 Luise 1685364

الهدف هو إظهار اسم الحيوان الأليف بجانب اسم المالك باستخدام أنواع الربط المختلفة.

مثال INNER JOIN

باستخدام INNER JOIN، ستظهر فقط السجلات التي لها علاقة فعلية بين الجدولين. سنقوم باختيار العمود name من جدول pets وإعادة تسميته إلى pet_name، ثم اختيار العمود name من جدول owners وإعادة تسميته إلى owner.

SELECT pets.name AS pet_name, owners.name AS owner
FROM pets
JOIN owners ON pets.owner_id = owners.id;

النتيجة ستكون كالتالي:

pet_name owner
Fido Johnny
Missy Johnny
Sissy Olly
Copper Ilenia

نلاحظ أن الحيوان Hopper لم يظهر، لأنه غير مرتبط بأي مالك في الجدول الآخر. كذلك لم تظهر المالكة Luise لأنها لا تملك حيواناً مسجلاً.

مثال LEFT JOIN

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

SELECT pets.name AS pet_name, owners.name AS owner
FROM pets
LEFT JOIN owners ON pets.owner_id = owners.id;

النتيجة:

pet_name owner
Fido Johnny
Missy Johnny
Sissy Olly
Copper Ilenia
Hopper NULL

هذا يكشف أن هناك حيواناً أليفاً غير مرتبط بمالك مسجل، وهو Hopper.

مثال RIGHT JOIN

باستخدام RIGHT JOIN، سيتم الاحتفاظ بجميع صفوف جدول owners لأنه يقع على اليمين في الاستعلام.

SELECT pets.name AS pet_name, owners.name AS owner
FROM pets
RIGHT JOIN owners ON pets.owner_id = owners.id;

النتيجة:

pet_name owner
Fido Johnny
Missy Johnny
Sissy Olly
Copper Ilenia
NULL Luise

يتضح هنا أن Luise موجودة في قاعدة البيانات كمالكة، لكنها لا تملك أي حيوان أليف مسجل.

مثال FULL JOIN

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

SELECT pets.name AS pet_name, owners.name AS owner
FROM pets
FULL JOIN owners ON pets.owner_id = owners.id;

النتيجة:

pet_name owner
Fido Johnny
Missy Johnny
Sissy Olly
Copper Ilenia
Hopper NULL
NULL Luise

هذا النوع مفيد جداً عند تدقيق جودة البيانات واكتشاف السجلات غير المكتملة في كلا الجدولين.

مقارنة سريعة بين أنواع JOIN

النوع ما الذي يحتفظ به؟ أفضل استخدام
INNER JOIN الصفوف المشتركة فقط عند الحاجة إلى البيانات المرتبطة حصراً
LEFT JOIN كل صفوف الجدول الأيسر + المتطابق من الأيمن اكتشاف السجلات التي لا تملك تطابقاً في الجدول الثاني
RIGHT JOIN كل صفوف الجدول الأيمن + المتطابق من الأيسر فحص السجلات غير المرتبطة في الجدول الأيسر
FULL JOIN جميع صفوف الجدولين تحليل شامل واكتشاف البيانات الناقصة من الجانبين

متى تختار نوع الربط المناسب؟

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

نصائح عملية عند استخدام JOIN في SQL

  1. احرص على كتابة شرط ON بدقة، لأن أي خطأ فيه قد يؤدي إلى نتائج مضللة.
  2. استخدم أسماء مستعارة للأعمدة عبر AS لتسهيل قراءة النتائج، خاصة عندما تتكرر أسماء الأعمدة بين الجداول.
  3. تأكد من وجود فهارس على أعمدة الربط مثل id وowner_id لتحسين الأداء في الجداول الكبيرة.
  4. افهم اتجاه الربط جيداً في LEFT JOIN وRIGHT JOIN، لأن تبديل مواقع الجداول يغيّر النتيجة.
  5. تعامل مع قيم NULL بحذر، فهي غالباً مؤشر على بيانات مفقودة أو غير مرتبطة.

الخلاصة التقنية

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

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *