0Pricing
SQL Academy · درس

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

مثال كلاسيكي على التسلسل الهرمي

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

ما الربط الذاتي؟

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

المثال التقليدي هو جدول employees الذي قد يكون لكل موظف فيه مدير، ويكون ذلك المدير أيضًا موظفًا مخزنًا في الجدول نفسه.

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

لننشئ جدولًا بسيطًا باسم employees. يحتوي كل موظف على id وname وmanager_id يشير إلى صف آخر في الجدول نفسه.

عندما تكون قيمة manager_id هي NULL، فلا يكون للموظف مدير، ويكون في أعلى التسلسل الهرمي، مثل CEO.

CREATE TABLE employees (
  id         INT PRIMARY KEY,
  name       VARCHAR(100) NOT NULL,
  manager_id INT REFERENCES employees(id)
);

إدراج بيانات نموذجية

لنملأ الجدول بتسلسل هرمي صغير لشركة. Alice هي المديرة التنفيذية CEO ولا تملك مديرًا. يرفع Bob وCarol تقاريرهِما إلى Alice، بينما يرفع Dave وEve تقاريرهِما إلى Bob.

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

الاستعلام من دون عملية ربط

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

SELECT id, name, manager_id
FROM employees;

كتابة الربط الذاتي

لعرض اسم المدير بجانب كل موظف، نربط جدول employees بنفسه. ونمنح كل نسخة اسمًا مستعارًا مختلفًا: e للموظف وm للمدير.

يربط شرط الربط بين manager_id الخاص بالموظف وid الخاص بالمدير.

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

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

يخفي INNER JOIN السابق Alice لأن قيمة manager_id لديها هي NULL، فلا يوجد صف مطابق في الجهة اليمنى. لتضمين الجميع، حتى الموظف الموجود في أعلى التسلسل الهرمي، استخدم LEFT JOIN.

ستظهر Alice مع قيمة NULL في عمود المدير.

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

استخدام COALESCE لتحسين سهولة القراءة

قد تكون قيمة NULL في عمود المدير مربكة. يمكننا استخدام COALESCE لاستبدال NULL بتسمية واضحة مثل 'لا يوجد مدير'، مما يجعل المخرجات أوضح في التقارير.

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

العثور على المرؤوسين المباشرين

يمكننا عكس الاستعلام لطرح السؤال التالي: من يرفع تقاريره إلى مدير محدد؟ ويُسمى ذلك العثور على المرؤوسين المباشرين. نبحث هنا عن جميع الموظفين الذين يرفعون تقاريرهم مباشرةً إلى Alice (id = 1).

SELECT e.name AS direct_report
FROM employees e
WHERE e.manager_id = 1;

حساب التقارير لكل مدير

يتيح الجمع بين الربط الذاتي وGROUP BY وCOUNT معرفة عدد المرؤوسين المباشرين لكل مدير. وهذا مفيد لتحليل أعباء العمل.

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

مستويان من العمق

لرؤية مستويين من التسلسل الهرمي في الوقت نفسه — الموظف ومديره ومدير مديره — يمكننا ربط الجدول للمرة الثالثة. وتضيف كل عملية ربط مستوى آخر إلى التسلسل الهرمي.

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

متى تكون للربط الذاتي حدود

تعمل عمليات الربط الذاتي جيدًا مع التسلسلات الهرمية الثابتة والضحلة (من مستوى إلى 3 مستويات). أما إذا كان العمق غير معروف أو غير محدود، مثل مخطط تنظيمي لشركة يمتد إلى 10 مستويات، فستحتاج إلى recursive CTEs بدلًا من ذلك.

وبالنسبة إلى معظم استعلامات الموظفين والمديرين العملية، فإن أسلوب الربط الذاتي المشروح في هذا الدرس هو الأداة المناسبة.

تحقق سريع

اختبر مدى فهمك للربط الذاتي والتسلسل الهرمي للموظفين والمديرين.

مراجعة الدرس

تعلمت في هذا الدرس كيفية استخدام الربط الذاتي لنمذجة التسلسل الهرمي التقليدي للموظفين والمديرين المخزن في جدول واحد والاستعلام عنه.

أهم النقاط:

  • يربط الربط الذاتي جدولًا بنفسه باستخدام اسمين مستعارين مختلفين.
  • يربط شرط الربط بين manager_id وid في الجدول نفسه.
  • استخدم INNER JOIN لرؤية الموظفين الذين لديهم مدير فقط، واستخدم LEFT JOIN لتضمين الجميع.
  • يمكن للدالة COALESCE استبدال قيم المدير NULL بتسمية واضحة.
  • بالنسبة إلى التسلسلات الهرمية ذات العمق غير المحدود، فكّر في استخدام recursive CTEs.

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

هل درس «الموظفون والمديرون» مجاني؟

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

ماذا ستتعلم في «الموظفون والمديرون»؟

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

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

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

كم من الوقت يستغرق درس «الموظفون والمديرون»؟

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

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

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

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

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