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

شرح مبسط:

تخيل أن لديك جدولين: جدول "العملاء" وجدول "الطلبات". تريد عرض قائمة بجميع العملاء وجميع الطلبات، حتى لو لم يكن لدى بعض العملاء أي طلبات أو لم تكن بعض الطلبات مرتبطة بأي عميل. هنا يأتي دور FULL OUTER JOIN.

الصيغة العامة:

SQL
SELECT column_list
FROM table1
FULL OUTER JOIN table2 ON table1.join_column = table2.join_column;
  • table1: الجدول الأول.
  • table2: الجدول الثاني.
  • join_column: العمود الذي سيتم استخدامه للربط بين الجدولين.
  • ON: الكلمة المفتاحية التي تحدد شرط الربط.

مثال عملي:

لنفترض أن لدينا الجدولين التاليين:

جدول العملاء (Customers):

CustomerIDCustomerName
1أحمد
2محمد
3علي

جدول الطلبات (Orders):

OrderIDCustomerIDOrderDate
10112024-01-15
10222024-01-20
10342024-01-25

لاحظ أن العميل رقم 3 ليس لديه أي طلبات، وهناك طلب رقم 103 ليس مرتبطًا بأي عميل موجود في جدول العملاء.

باستخدام FULL OUTER JOIN:

SQL
SELECT Customers.CustomerID, CustomerName, OrderID, OrderDate
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;

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

CustomerIDCustomerNameOrderIDOrderDate
1أحمد1012024-01-15
2محمد1022024-01-20
3عليNULLNULL
NULLNULL1032024-01-25

كما ترى، تم تضمين جميع العملاء (بما في ذلك علي الذي ليس لديه طلبات) وجميع الطلبات (بما في ذلك الطلب 103 الذي ليس مرتبطًا بعميل). في الحالات التي لا يوجد فيها تطابق، تم ملء الأعمدة بقيم NULL.

الاختلافات بين أنواع الـ JOIN الأخرى:

  • INNER JOIN: يُرجع فقط السجلات التي يوجد بها تطابق في كلا الجدولين.
  • LEFT JOIN (أو LEFT OUTER JOIN): يُرجع جميع السجلات من الجدول الأيسر (الجدول الأول) والسجلات المتطابقة من الجدول الأيمن. إذا لم يكن هناك تطابق، يتم ملء الأعمدة من الجدول الأيمن بقيم NULL.
  • RIGHT JOIN (أو RIGHT OUTER JOIN): يُرجع جميع السجلات من الجدول الأيمن (الجدول الثاني) والسجلات المتطابقة من الجدول الأيسر. إذا لم يكن هناك تطابق، يتم ملء الأعمدة من الجدول الأيسر بقيم NULL.

FULL OUTER JOIN يجمع بين وظيفتي LEFT JOIN و RIGHT JOIN، حيث يُرجع جميع السجلات من كلا الجدولين.

ملاحظة: بعض أنظمة قواعد البيانات، مثل MySQL قبل الإصدار 8.0، لا تدعم FULL OUTER JOIN بشكل مباشر. في هذه الحالة، يُمكن محاكاة FULL OUTER JOIN باستخدام UNION بين LEFT JOIN و RIGHT JOIN.

باختصار، FULL OUTER JOIN أداة قوية لدمج البيانات من جدولين بشكل شامل، مع ضمان تضمين جميع السجلات من كلا الجدولين في النتيجة.