الجزء ال13: الربط الذاتي Self-Join
لا يعتبر ال Self-join هو نوع جديد من الربط, فقط هو مفهوم, حيث يمكن ان يصنف
بأن يكون من نوع الربط الداخلي Inner
join او الربط
الخارجي Outer join او من نوع Cross join , ولتوضيح
ذلك لنأخذ مثال الجدول التالي الذي يصف اسماء المدراء والموظفين لديهم:
لاحظ في جدول البيانات اعلاه ان اسم المدير
"صفاء" تكرر 3 مرات, "كريمة" 2 مرة, "شفيق" 1 مرة,
لماذا التكرار؟ الحل هو بفصل الجدول وجعل جدول للمدراء واخر للموظفين كالأتي:
ولكن يوجد طريقة مثلى لحل مثل هذا النوع من التكرار بعدم
فصل الجدول وانما بجعله بنفس الجدول كالأتي:
والأن اريد كتابة جمله الأستعلام التي ستنشأ الجدول اعلاه مع قيد الFK :
CREATE TABLE tblEmployees_Managers
(
[EmployeeID] INT
PRIMARY KEY IDENTITY(1,1) NOT NULL,
[Name] NVARCHAR(26) NOT NULL,
[ManagerID] INT
CONSTRAINT ManagerID_FK
REFERENCES
tblEmployees_Managers(EmployeeID)
)
وكتابة البيانات في الجدول كالأتي:
مثال: اريد استعادة اسماء المدراء مع موظفيهم؟
الحل:
SELECT E.Name AS [Employee Name],M.Name As [Manager Name]
FROM tblEmployees_Managers E
INNER JOIN tblEmployees_Managers M
ON E.ManagerID= M.EmployeeID
لأحظ في المثال اعلاه اني استخدمت ربط من نوع الداخلي Inner join الذي
سيسترجع القيم المشتركة فقط بين كل مدير وموظف, والربط يكون بنفس الجدول ولكن
تسميه الأسم المستعار تجعله ظاهرياً يبدو كجدول ثاني كما ترى ان الحرف E اصبح يرمز
للموظفين , وحرف M يرمز للمدراء, وفي فقرة الON , اعتبرت E وهو جدول
للموظفين به حقل الFK وهو الManagerID يربط بجدول
الM المدراء , والحقل الرئيسي في جدول المدراء M هو الEmployeeID بمثابة ID الذي هو
نفسه الPK
واخيراً قمت بأسترجاع اسماء المدراء والموظفين في فقرة
الSELECT لاحظ Name هو نفسه فقط الي يختلف هو الأسم المستعار
للجدول E,M
Comments
Post a Comment