عمليات الربط JOIN في SQL تتيح دمج البيانات من جدولين أو أكثر بناءً على عمود مشترك بينها. وهي من أهم العمليات في قواعد البيانات العلائقية، حيث تُوزَّع البيانات على جداول متعددة لتقليل التكرار وتنظيم المعلومات، ثم نستخدم JOIN لإعادة تجميعها وقت الحاجة في استعلام واحد.
لماذا نحتاج JOIN؟
بدلاً من تخزين بيانات المستخدم مكرّرة داخل كل طلب، نحتفظ ببيانات المستخدمين في جدول users وبالطلبات في جدول orders، ونربط بينهما عبر عمود user_id. هذا التصميم يوفّر مساحة، ويمنع تضارب البيانات، ويجعل التحديث أسهل. وعند الحاجة لعرض اسم المستخدم بجانب طلبه نستخدم JOIN.
INNER JOIN
يُعيد INNER JOIN فقط الصفوف التي لها مطابقة في كلا الجدولين. فإذا كان هناك طلب بلا مستخدم مطابق، أو مستخدم بلا طلبات، فلن يظهر في النتيجة.
SELECT orders.id, users.name
FROM orders
INNER JOIN users ON orders.user_id = users.id;
تحدد جملة ON شرط الربط، أي العمود الذي يجب أن تتطابق قيمته بين الجدولين.
LEFT JOIN
يُعيد LEFT JOIN جميع صفوف الجدول الأيسر (الأول) حتى لو لم توجد مطابقة في الجدول الأيمن، ويملأ القيم الناقصة بـ NULL. وهو مفيد عندما نريد إظهار كل المستخدمين حتى من لم يقدّم أي طلب.
SELECT users.name, orders.id
FROM users
LEFT JOIN orders ON users.id = orders.user_id;
RIGHT JOIN
يعمل RIGHT JOIN عكس LEFT تماماً، فيُعيد جميع صفوف الجدول الأيمن حتى دون مطابقة في الأيسر. وعملياً يمكن دائماً تحويل أي RIGHT JOIN إلى LEFT JOIN بتبديل ترتيب الجدولين، ولذلك يُستخدم RIGHT بشكل أقل.
SELECT users.name, orders.id
FROM orders
RIGHT JOIN users ON users.id = orders.user_id;
أخطاء شائعة
- نسيان جملة ON، ما يؤدي إلى ربط كل صف بكل صف (Cross Join) ونتائج ضخمة وخاطئة.
- استخدام INNER JOIN حين يكون المطلوب إظهار الصفوف غير المتطابقة أيضاً (والصحيح LEFT JOIN).
- عدم تحديد اسم الجدول قبل العمود عند تشابه أسماء الأعمدة بين الجدولين، ما يسبب التباساً.
تمرين محلول
المطلوب: اعرض اسم كل عميل مع عدد طلباته، بما في ذلك العملاء الذين لم يطلبوا شيئاً (يظهر عددهم صفراً).
SELECT users.name, COUNT(orders.id) AS orders_count
FROM users
LEFT JOIN orders ON users.id = orders.user_id
GROUP BY users.name;
استخدمنا LEFT JOIN لضمان ظهور كل العملاء، ثم COUNT مع GROUP BY لحساب عدد الطلبات لكل عميل؛ ومن لا طلبات له يظهر عنده الرقم صفر لأن COUNT تتجاهل قيم NULL.
الخلاصة
عمليات JOIN هي جوهر العمل مع قواعد البيانات العلائقية. INNER JOIN يعيد المتطابق فقط، وLEFT JOIN يحتفظ بكل صفوف الجدول الأول، وRIGHT JOIN عكسه. وإتقان شرط ON واختيار نوع الربط المناسب يمكّنك من دمج البيانات الموزّعة بدقة وكفاءة.
