FULL OUTER JOIN
لدمج سجلات من جدولين معًا، بحيث يتم تضمين جميع السجلات من كلا الجدولين في النتيجة. إذا لم يكن هناك تطابق بين سجلات الجدولين بناءً على شرط الربط، فسيتم ملء الأعمدة المقابلة للجدول الذي لا يوجد تطابق فيه بقيم NULL
.شرح مبسط:
تخيل أن لديك جدولين: جدول "العملاء" وجدول "الطلبات". تريد عرض قائمة بجميع العملاء وجميع الطلبات، حتى لو لم يكن لدى بعض العملاء أي طلبات أو لم تكن بعض الطلبات مرتبطة بأي عميل. هنا يأتي دور FULL OUTER JOIN
.
الصيغة العامة:
SELECT column_listFROM table1FULL OUTER JOIN table2 ON table1.join_column = table2.join_column;
table1
: الجدول الأول.table2
: الجدول الثاني.join_column
: العمود الذي سيتم استخدامه للربط بين الجدولين.ON
: الكلمة المفتاحية التي تحدد شرط الربط.
مثال عملي:
لنفترض أن لدينا الجدولين التاليين:
جدول العملاء (Customers):
CustomerID | CustomerName |
---|---|
1 | أحمد |
2 | محمد |
3 | علي |
جدول الطلبات (Orders):
OrderID | CustomerID | OrderDate |
---|---|---|
101 | 1 | 2024-01-15 |
102 | 2 | 2024-01-20 |
103 | 4 | 2024-01-25 |
لاحظ أن العميل رقم 3 ليس لديه أي طلبات، وهناك طلب رقم 103 ليس مرتبطًا بأي عميل موجود في جدول العملاء.
باستخدام FULL OUTER JOIN
:
SELECT Customers.CustomerID, CustomerName, OrderID, OrderDateFROM CustomersFULL OUTER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
ستكون النتيجة كالتالي:
CustomerID | CustomerName | OrderID | OrderDate |
---|---|---|---|
1 | أحمد | 101 | 2024-01-15 |
2 | محمد | 102 | 2024-01-20 |
3 | علي | NULL | NULL |
NULL | NULL | 103 | 2024-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
أداة قوية لدمج البيانات من جدولين بشكل شامل، مع ضمان تضمين جميع السجلات من كلا الجدولين في النتيجة.