🔍 Self Join في SQL: دليلك الشامل لفهم الربط الذاتي للجداول

Self Join هو نوع خاص من عمليات JOIN في SQL حيث تقوم بربط الجدول مع نفسه. يبدو هذا المفهوم غريباً في البداية، لكنه مفيد جداً في حالات معينة خاصة عندما يكون لديك بيانات مرتبطة داخل نفس الجدول.


📊 ما هو Self Join؟

Self Join هو عملية رجدول بنفسه كما لو كان جدولين منفصلين. نستخدم هذا النوع من الـ JOIN عندما تحتوي البيانات على علاقة ذاتية داخل الجدول الواحد.

أهم استخدامات Self Join:

  • إدارة تسلسل الموظفين (المدير والمرؤوس)
  • تنظيم الهيكل التنظيمي للشركات
  • تمثيل العلاقات التسلسلية بين البيانات
  • إدارة المنتجات ذات المستويات المتعددة

🛠️ بناء جملة Self Join الأساسي

لتنفيذ Self Join، نستخدم الأسماء المستعارة (Aliases) للتمييز بين نسختي الجدول:

SELECT A.column_name, B.column_name
FROM table_name A, table_name B
WHERE A.common_field = B.common_field;

أو باستخدام JOIN الصريح:

SELECT A.column_name, B.column_name
FROM table_name A
JOIN table_name B ON A.common_field = B.common_field;

💼 مثال عملي: إدارة هيكل الموظفين

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

CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    name VARCHAR(50),
    manager_id INT
);

للعثور على كل موظف مع اسم مديره:

SELECT E.name AS employee_name, M.name AS manager_name
FROM employees E
JOIN employees M ON E.manager_id = M.employee_id;

في هذا المثال:

  • E تمثل نسخة الجدول للموظفين
  • M تمثل نسخة الجدول للمديرين
  • نربط بينهما عبر manager_id

📋 مثال آخر: منتجات ذات فئات فرعية

لنفترض جدول المنتجات مع فئات فرعية:

SELECT P1.product_name AS main_product, 
       P2.product_name AS sub_product
FROM products P1
JOIN products P2 ON P1.product_id = P2.parent_product_id;

⚠️ نصائح مهمة عند استخدام Self Join

  1. استخدم الأسماء المستعارة دائماً للتمييز بين نسختي الجدول
  2. حدد العلاقة بوضوح في شرط ON
  3. اختر أسماء ذات معنى للأسماء المستعارة
  4. انتبه للبيانات المكررة فقد تحتاج إلى استخدام DISTINCT

🎯 متى تستخدم Self Join؟

استخدم Self Join عندما:

  • البيانات لها علاقة ذاتية داخل الجدول الواحد
  • تحتاج إلى مقارنة الصفوف مع بعضها البعض
  • تتعامل مع هياكل هرمية أو تسلسلية
  • تريد تحليل العلاقات بين البيانات المتشابهة

ماذا سنتعلم في الدرس القادم؟ 🎓

في الدرس القادم، سنتعلم عن "UNION و UNION ALL" في SQL، حيث سنتعرف على كيفية دمج نتائج استعلامات متعددة في مجموعة نتيجة واحدة، والفرق بينهما ومتى نستخدم كل منهما في مشاريعنا العملية.