شرح SQL Full Outer Join مع أمثلة عملية وصياغة الاستعلام
ما هو الربط JOIN في SQL؟
تُستخدم عمليات JOIN في SQL لدمج الصفوف القادمة من جدولين أو أكثر بالاعتماد على عمود مشترك بينها. هذه الآلية أساسية عند التعامل مع قواعد البيانات العلائقية، لأنها تتيح استخراج بيانات مترابطة في استعلام واحد بدل قراءة كل جدول على حدة.
من أشهر أنواع JOIN ما يلي:
INNER JOINLEFT JOINRIGHT JOINFULL OUTER JOIN
في هذا المقال سنركّز على FULL OUTER JOIN، ونشرح متى يُستخدم، وكيفية كتابة الصياغة الصحيحة له، وما الفائدة العملية منه عند تحليل البيانات.

ما هو FULL OUTER JOIN في SQL؟
يُستخدم FULL OUTER JOIN، ويُشار إليه أحياناً باسم OUTER JOIN، لإرجاع جميع السجلات الموجودة في الجدول الأيسر والجدول الأيمن معاً، سواء وُجد تطابق بينهما أم لا.
بمعنى أبسط، إذا كان هناك صف متطابق في الجدولين بناءً على العمود المشترك، فسيتم دمجه في نتيجة واحدة. أما إذا وُجد صف في أحد الجدولين دون مقابل له في الجدول الآخر، فسيظهر أيضاً في النتيجة، مع قيم فارغة NULL في الأعمدة غير المتطابقة.
هذا النوع مفيد جداً عندما تريد رؤية الصورة الكاملة للبيانات، وليس فقط السجلات المتطابقة.
متى يكون هذا النوع مناسباً؟
يكون FULL OUTER JOIN مناسباً عندما تحتاج إلى:
- عرض جميع العناصر من جدولين مترابطين دفعة واحدة.
- اكتشاف السجلات غير المرتبطة في أي من الجانبين.
- تحليل الفجوات في البيانات مثل العملاء دون طلبات، أو الطلبات غير المرتبطة بسجلات عملاء.
لكن يجدر الانتباه إلى أن هذا النوع قد يُرجع كمية كبيرة من البيانات، لذلك من الأفضل استخدامه عند وجود حاجة فعلية إلى هذا المستوى من الشمول.
مثال عملي لفهم FULL OUTER JOIN
لنفترض أنك تُدرّس مادة الأدب الأمريكي، ولديك عشرة طلاب، وتريد أن يختار كل طالب كتاباً مختلفاً من قائمة كتب كلاسيكية معتمدة مسبقاً. بعض الطلاب اختاروا كتبهم بالفعل، بينما لم يحسم آخرون قرارهم بعد.
في هذه الحالة، لديك جدولان:
- جدول
studentsويحتوي على أسماء الطلاب وأرقامهم التعريفية. - جدول
booksويحتوي على عنوان الكتاب واسم المؤلف ورقمISBNومعرّف الطالب الذي اختار الكتاب إن وُجد.

كيفية كتابة FULL OUTER JOIN في SQL
لإجراء الربط الخارجي الكامل على البيانات السابقة، يمكن استخدام الاستعلام التالي:
SELECT students.name, books.title
FROM students
FULL OUTER JOIN books
ON students.student_id = books.student_id;
شرح الاستعلام خطوة بخطوة
- يستخرج الأمر
SELECTاسم الطالب من جدولstudentsوعنوان الكتاب من جدولbooks. - يحدد
FULL OUTER JOINأننا نريد جميع السجلات من كلا الجدولين. - يُستخدم الشرط
ON students.student_id = books.student_idلربط الصفوف التي تمتلك نفس قيمةstudent_id.
هذا يعني أن النتيجة ستعرض:
- كل الطلاب، حتى الذين لم يختاروا كتاباً بعد.
- كل الكتب، حتى التي لم يخترها أي طالب حتى الآن.

كيف نقرأ نتيجة الاستعلام؟
عند تنفيذ الاستعلام، ستظهر لك نتيجة شاملة تجمع بيانات الجدولين. إذا كان الطالب قد اختار كتاباً، فسيظهر اسمه بجانب عنوان الكتاب. وإذا لم يختر كتاباً بعد، فسيظهر اسمه مع قيمة NULL في عمود الكتاب. وبالمثل، إذا كان هناك كتاب لم يختَره أحد، فسيظهر عنوانه مع قيمة NULL في عمود اسم الطالب.
وهذا يمنحك رؤية عملية للإجابة عن أسئلة مهمة مثل:
- من هم الطلاب الذين لم يختاروا كتاباً بعد؟
- ما الكتب التي ما تزال متاحة؟
- هل توجد بيانات ناقصة أو علاقات غير مكتملة بين الجدولين؟
الفرق العملي بين FULL OUTER JOIN والأنواع الأخرى
لفهم قيمة هذا النوع بشكل أفضل، من المفيد مقارنته سريعاً ببقية الأنواع:
| نوع الربط | النتيجة |
|---|---|
INNER JOIN |
يعرض السجلات المتطابقة فقط بين الجدولين. |
LEFT JOIN |
يعرض كل سجلات الجدول الأيسر وما يقابلها من الجدول الأيمن. |
RIGHT JOIN |
يعرض كل سجلات الجدول الأيمن وما يقابلها من الجدول الأيسر. |
FULL OUTER JOIN |
يعرض كل السجلات من الجدولين سواء تطابقت أم لم تتطابق. |
إذا كان هدفك هو الحصول على نظرة شاملة واكتشاف السجلات غير المرتبطة، فإن FULL OUTER JOIN غالباً هو الخيار الأنسب.
ملاحظات مهمة قبل استخدام FULL OUTER JOIN
- قد ينتج عنه عدد كبير من الصفوف، خصوصاً في قواعد البيانات الضخمة.
- يمكن أن يكون أبطأ من أنواع الربط الأخرى عند غياب الفهارس
Indexesالمناسبة. - يفضّل استخدامه عندما تحتاج فعلاً إلى البيانات المتطابقة وغير المتطابقة معاً.
- من المهم فهم قيم
NULLفي النتائج، لأنها تعبّر عن غياب التطابق وليس بالضرورة وجود خطأ في البيانات.
أفضل استخدامات FULL OUTER JOIN في المشاريع العملية
في البيئات الحقيقية، يُستخدم هذا النوع من الربط في سيناريوهات متعددة، منها:
- مراجعة تطابق البيانات بين نظامين مختلفين.
- تحليل العملاء والطلبات لاكتشاف العملاء غير النشطين أو الطلبات غير المرتبطة.
- مقارنة الجداول بعد عمليات الترحيل
Migrationأو الدمج. - إعداد تقارير تدقيق تساعد على كشف النواقص في السجلات.
الخلاصة التقنية
يُعد FULL OUTER JOIN أداة قوية في SQL عندما تحتاج إلى رؤية شاملة ومتكاملة لبيانات جدولين مرتبطين. قوته الحقيقية تظهر في كشف السجلات المتطابقة وغير المتطابقة معاً، ما يجعله مفيداً في التحليل والتدقيق واكتشاف الثغرات في البيانات. ومع ذلك، ينبغي استخدامه بوعي، لأن نتائجه قد تكون كبيرة ومعقدة إذا لم يكن الاستعلام موجهاً بدقة.