0Pricing
SQL Academy · درس

ما هو الربط الذاتي

اربط الجدول بنفسه باستخدام أسماء مستعارة

ما هو الربط الذاتي درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.

ربط الجدول بنفسه

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

المثال الأكثر شيوعًا هو جدول employees الذي يخزن فيه كل صف خاص بموظف أيضًا معرّف مديره، مع أن المدير موظف موجود في الجدول نفسه.

جدول الموظفين

لنفترض وجود جدول employees يحتوي كل صف فيه على id وname وmanager_id يشير إلى صف آخر في الجدول نفسه.

تُسمى هذه البنية علاقة مرجعية ذاتية أو علاقة تكرارية. شغّل الاستعلام أدناه لإنشاء الجدول وتعبئته.

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

INSERT INTO employees VALUES
  (1, 'Alice',   NULL),
  (2, 'Bob',     1),
  (3, 'Carol',   1),
  (4, 'Dave',    2),
  (5, 'Eve',     2),
  (6, 'Frank',   3);

لماذا لا تنجح عمليات الربط العادية هنا

إذا أردت عرض كل موظف إلى جانب اسم مديره، فإن كلا جزأي البيانات موجودان في الجدول نفسه. يربط الربط العادي جدولين مختلفين، أو مصدرين مختلفين على الأقل.

وللقراءة من الجدول نفسه مرتين — مرة للموظف ومرة للمدير — تحتاج إلى استخدام ربط ذاتي مع أسماء مستعارة للجداول.

التعريف بالأسماء المستعارة

لإجراء ربط ذاتي، اكتب اسم الجدول نفسه مرتين في عبارة FROM / JOIN، وامنح كل ظهور اسمًا مستعارًا مختلفًا. تتيح الأسماء المستعارة لـ SQL التعامل مع الظهورين كجدولين منطقيين منفصلين.

من الشائع استخدام أسماء مستعارة قصيرة وواضحة، مثل e للدلالة على الموظف وm للدلالة على المدير.

-- Conceptual structure (not yet a full query)
-- FROM employees AS e
-- JOIN employees AS m ON e.manager_id = m.id

أول ربط ذاتي لك

إليك ربطًا ذاتيًا كاملًا يعرض كل موظف مع اسم مديره. يربط شرط ON بين manager_id الخاص بالموظف وid الخاص بالمدير.

ليس لدى Alice مدير، لذلك تُستبعد باستخدام INNER JOIN، إذ لا يوجد صف مطابق في جهة المدير.

SELECT
  e.name   AS employee,
  m.name   AS manager
FROM employees AS e
INNER JOIN employees AS m
  ON e.manager_id = m.id;

تضمين الصفوف التي ليس لها مدير

عند استخدام INNER JOIN، تُحذف الصفوف التي لا تملك تطابقًا. لدى Alice القيمة manager_id = NULL، لذلك تختفي من النتائج.

بدّل إلى LEFT JOIN للاحتفاظ بجميع الموظفين، وعرض NULL ببساطة، أو تسمية مناسبة، عندما لا يوجد مدير.

SELECT
  e.name             AS employee,
  COALESCE(m.name, 'No Manager') AS manager
FROM employees AS e
LEFT JOIN employees AS m
  ON e.manager_id = m.id;

تصفية نتائج الربط الذاتي

يمكنك إضافة عبارة WHERE إلى الربط الذاتي كما تفعل في أي استعلام آخر. يسترجع المثال أدناه الموظفين الذين يكون مديرهم المباشر هو Alice فقط (id = 1).

SELECT
  e.name  AS employee,
  m.name  AS manager
FROM employees AS e
INNER JOIN employees AS m
  ON e.manager_id = m.id
WHERE m.name = 'Alice';

حساب المرؤوسين المباشرين

تتوافق عمليات الربط الذاتي بصورة طبيعية مع الدوال التجميعية. يحسب الاستعلام أدناه عدد المرؤوسين المباشرين لكل مدير من خلال التجميع باستخدام الاسم المستعار للمدير.

SELECT
  m.name           AS manager,
  COUNT(e.id)      AS direct_reports
FROM employees AS e
INNER JOIN employees AS m
  ON e.manager_id = m.id
GROUP BY m.name
ORDER BY direct_reports DESC;

الربط الذاتي للبيانات غير الهرمية

لا تقتصر عمليات الربط الذاتي على التسلسلات الهرمية. ففي كل مرة تكون فيها الصفوف في جدول مرتبطة بصفوف أخرى في الجدول نفسه، يمكن أن يساعدك الربط الذاتي.

على سبيل المثال، يمكنك العثور على جميع أزواج الموظفين الذين لديهم المدير نفسه، وذلك بربط الجدول بنفسه وفق قيم manager_id المتطابقة، مع ضمان عدم إقران الموظف بنفسه.

SELECT
  a.name AS employee_1,
  b.name AS employee_2,
  a.manager_id
FROM employees AS a
INNER JOIN employees AS b
  ON a.manager_id = b.manager_id
  AND a.id < b.id;

دور الاسم المستعار

الأسماء المستعارة إلزامية في الربط الذاتي؛ فمن دونها لن تتمكن قاعدة البيانات من معرفة نسخة الجدول التي يشير إليها كل عمود، وستحصل على خطأ غموض.

يمكنك استخدام أي أسماء مستعارة تفضلها. والقاعدة الأساسية هي أن كل مرجع إلى عمود يجب أن يسبقه الاسم المستعار الصحيح، حتى يعرف SQL نسخة الجدول التي يجب الرجوع إليها.

-- This will fail: column 'name' is ambiguous
-- SELECT name FROM employees JOIN employees ON manager_id = id;

-- This works: aliases remove the ambiguity
SELECT e.name, m.name
FROM employees AS e
JOIN employees AS m ON e.manager_id = m.id;

حالات الاستخدام الواقعية

تظهر عمليات الربط الذاتي كثيرًا في قواعد البيانات الفعلية. ومن حالات الاستخدام الشائعة:

  • المخططات التنظيمية — الموظفون ومديروهم
  • أشجار التصنيفات — التصنيفات الأصلية والفرعية
  • قوائم المواد — مكوّنات تتكوّن من مكوّنات أخرى
  • الشبكات الاجتماعية — العثور على أصدقاء الأصدقاء في جدول اتصالات واحد

إن التعرّف على مفتاح أجنبي ذي مرجعية ذاتية في مخطط قاعدة البيانات هو أول مؤشر إلى احتمال الحاجة إلى ربط ذاتي.

تحقق سريع

اختبر مدى فهمك للربط الذاتي قبل الانتقال إلى الجزء التالي.

مراجعة الدرس

تعلمت في هذا الدرس ماهية الربط الذاتي ومتى تستخدمه:

  • يربط الربط الذاتي جدولًا بنفسه من خلال الإشارة إليه مرتين باستخدام أسماء مستعارة مختلفة
  • استخدم INNER JOIN لاستبعاد الصفوف التي لا تملك تطابقًا، مثل المديرين في أعلى التسلسل الهرمي، أو استخدم LEFT JOIN للاحتفاظ بها
  • أضف WHERE وGROUP BY والدوال التجميعية تمامًا كما تفعل في أي عملية ربط أخرى
  • استخدم a.id < b.id في عبارة ON لتجنب الأزواج المكررة عند مقارنة الصفوف داخل الجدول نفسه
  • تُعد عمليات الربط الذاتي الأداة الأساسية للتعامل مع البيانات الهرمية وأشجار التصنيفات وأي علاقة ذات مرجعية ذاتية

التالي: استكشاف التسلسلات الهرمية متعددة المستويات باستخدام recursive CTEs.

الأسئلة الشائعة

هل درس «ما هو الربط الذاتي» مجاني؟

نعم — نص درس «ما هو الربط الذاتي» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.

ماذا ستتعلم في «ما هو الربط الذاتي»؟

اربط الجدول بنفسه باستخدام أسماء مستعارة تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟

لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «ما هو الربط الذاتي»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟

نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. ما هو الربط الذاتي
  2. الموظفون والمديرون
  3. مقارنة الصفوف في الجدول نفسه
  4. حدود الربط الذاتي
← العودة إلى SQL Academy