Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

الربط الذاتي (Self Join)

جزء من قسم الأساسيات في رحلة SQL على Coddy. الدرس 46 من 72.

تُعد الانضمامات الذاتية (Self-joins) أنواعًا مختلفة من الانضمامات. حتى الآن، تحدثنا عن عمليات الانضمام لعدّة جداول، ولكن الانضمامات الذاتية تُربط بـ `table` نفسه. والمثال التقليدي على ذلك هو جدول `employees`.

employee_idemployee_namemanager_id
1Minke2
2Temur3
3Tatjana4
4Marinela 

كل موظف لديه مدير باستثناء المدير الأعلى، وكل مدير هو أيضاً موظف.

المشكلة: نريد معرفة اسم المدير لكل موظف.

SELECT e2.employee_id, e2.employee_name, e1.employee_name as manager_name
FROM employees as e1
JOIN employees as e2 ON e1.employee_id = e2.manager_id

نقوم بالربط بين نفس الـ table باستثناء أنه في المرة الأولى نسميه e1 وفي المرة الثانية يكون e2. يتم الربط بين الحقلين employee_id و manager_id.

النتيجة:

employee_idemployee_namemanager_name
1MinkeTemur
2TemurTatjana
3TatjanaMarinela
challenge icon

التحدي

متوسط

الجداول والأعمدة المتاحة:

  • <strong>friends</strong>: <strong>id</strong>, <strong>name</strong>, <strong>friend_id</strong>

أوجد أزواج الأصدقاء الذين تربطهم صداقة متبادلة (توجد الصداقة المتبادلة عندما يشير friend_id للشخص A إلى الشخص B يشير friend_id للشخص B إلى الشخص A). اعرض اسمي كلا الصديقين في صف واحد. سمِّ الأعمدة friend1 و friend2.

ملاحظة: قم بتضمين المعيار friend1.id < friend2.id في بند WHERE حتى لا يتضمن أزواجًا مكررة 

جرّب بنفسك

-- اربط الجدول بنفسه حتى يظهر صف واحد شخصين مختلفين
SELECT ____ AS friend1, ____ AS friend2
FROM friends f1
JOIN friends f2 ON ____
-- احتفظ فقط بالأزواج التي تشير إلى بعضها البعض
WHERE ____ AND f1.id < f2.id;
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الأساسيات

تدرّب بنفسك: Playground لـ SQL