Skip to main content

الجزء ال11: الربط Joins

الجزء ال11: الربط Joins

قبل البدء بمعرفة ماهو الJoin  وكيف نستخدم الJoin وماهي انواع الjoin , لنفهم مبدء العلاقات بين الجداول, لنفرض ان لديك جدول به البيانات التالية:
ID
Name
Gender
City
Salary
1
صفاء
ذكر
أربيل
295000
2
علاء
ذكر
أربيل
670000
3
سوزان
أنثى
بغداد
930000
4
أمير
ذكر
أربيل
350000
5
سارة
أنثى
بغداد
730000
6
محمد
ذكر
البصرة
890000
7
أحمد
ذكر
البصرة
980000
8
كمال
ذكر
دهوك
1000000


كمل تلاحظ في حقل المدينة city تكررت "أربيل" 3 مرات , وبغداد 2 مرة, والبصرة 2 مرة, وكذلك في حقل نوع الجنس Gender التكرار مستمر ل"ذكر" و "أنثى" لماذا نكرر البيانات؟ طبعاً تكرار البيانات يحتاج الى مساحة خزن البيانات وكذلك عند استرجاع البيانات سيؤثر ذلك على سرعة تنفيذ جمل الأستعلام وبهذا جاء المبدء من العلاقات هو أزالة هذا النوع من التكرار عن طريق استخدام مفهوم الPK-FK المذكورة في الجزء الثاني,


فمثلاً في حقل نوع الجنس Gender بدل ماتكون القيم "ذكر" و "أنثى" ستكون عبارة عن ارقام 1 يرمز للذكر و2 ترمز للأنثى, وهذا يعني الأتي:


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


والأن تم ازالة تكرار البيانات بتقسيم الجدول الى ثلاث جداول : جدول لنوع الجنس وجدول للمدن وجدول للموظفين.
ملاحظة: عند ربط جدول الموظفين بجدول نوع الجنس سيتم ذلك بأنشاء حقل في جدول الموظفين وتسميته GenderID والذي سيصبح المفتاح الخارجي FK الذي سيشير الى الID في جدول نوع الجنس والذي هو بدوره المفتاح الرئيسي PK ونفس الفكرة بالنسبة الى جدول المدن حيث تم انشاء حقل في جدول الموظفين اسمه CityID هو المفتاح الخارجي FK الذي يشير الى الID في جدول المدن وهو بدورة المفتاح الرئيسي PK.

والأن لنأخذ مثال : اريد استرجاع البيانات التالية للموظفين : اسم الموظف ومن اي مدينة ونوع جنسه؟
الجواب هو عن طريق استخدام الربط Join , والأن نستطيع ان نعُرف الJoin هو عبارة عن استرجاع قيم من جدولين او اكثر, وفي المثال السابق حددت استرجاع البيانات من ثلاث جداول وهي "جدول الموظفين" و"جدول المدن" و "جدول نوع الجنس"

يوجد ثلاث انواع رئيسية للربط Joins :
1)     الربط الداخلي او الربط Inner Join or Join: سيسترجع فقط القيم من جدولين الذين بينهما قيم مشتركة
2)     الربط الخارجي Outer Join  وهو بدورة ثلاث انواع:
a)      الربط الخارجي نوع يمين Right Outer join or Right join: سيسترجع القيم المشتركة من الجدولين والقيم المشتركة والغير مشتركة من الجدول الذي على اليمين.
b)     الربط الخارجي نوع يسار Left Outer join or Left join: سيسترجع القيم المشتركة من الجدولين والقيم المشتركة والغير مشتركة من الجدول الذي على اليسار.
c)      الربط الخارجي الأجمالي Full Outer join or Full join: سيسترجع القيم المشتركة والغير مشتركة من كلا الجدولين.
3)      الربط المتقاطع Cross join: هو عبارة عن cartesian product اي اذا كان في احد الجدولين 40 سجل بيانات وفي الجدول الأخر 4 سجلات للبيانات فالناتج هو 4*10 = 40 سجل للبيانات مسترجع! لم ادخل في تفاصيل هذا النوع من الربط لعدم وجود تطبيق منطقي من ناحية الحياة اليومية لهذا النوع من الربط.



والأن سوف افصل جدول الموظفين الى ثلاث جداول واربطهم بمبدأ الPK-FK كالأتي:
في البداية يجب حذف الحقلين Gender ,City  :
  ALTER TABLE [test].[dbo].[tblEmployees]
  DROP Column [City]

  ALTER TABLE [test].[dbo].[tblEmployees]
  DROP Column [Gender]
سأنشأ جدول لنوع الجنس tblGender :
CREATE TABLE [test].[dbo].[tblGender]
 (
 [ID] INT NOT NULL PRIMARY KEY,
 [GenderName] NVARCHAR(20) NOT NULL
 )
سأنشأ جدول للمدن tblCity:
CREATE TABLE [test].[dbo].[tblCity]
 (
 [ID] INT NOT NULL PRIMARY KEY,
 [CityName] NVARCHAR(20) NOT NULL
 )


واخيراً في جدول الموظفين حقلين   GenderID  يعتبر المفتاح الخارجي الذي يشير الى المفتاح الرئيسي في جدول tblGender للحقل ID , وحقل اخر CityID يعتبر المفتاح الخارجي الذي يشير الى المفتاح الرئيسي في جدول tblCity للحقل ID , عن طريق جملة الأستعلام التالية:
ALTER TABLE [test].[dbo].[tblEmployees]
 ADD [GenderID] INT
 CONSTRAINT FK_tblEmployees_GenderID
 REFERENCES tblGender(ID),
 [CityID] INT
 CONSTRAINT FK_tblEmployees_CityID
 REFERENCES tblCity(ID)
في جدول tblGender قمت بأضافة القيم التالية:


وفي جدول tblCity قمت بأضافة القيم التالية:



والأن نعود لجدول الtblEmployees ونعدل القيم كالأتي:



بهذا انتهينا من فصل الجداول وانشاء العلاقة بينهم وادخال البيانات لكل منهم.
الجزء الأخير كيفية استخدام الربط Join  لأسترجاع البيانات من ثلاث جداول بأستخدام انواعه الثلاث,
الصيغة العامة لكتابة اي جملة الأستعلام للJoin :


SELECT {COLUMN_LIST}
FROM {LEFT_TABLE}
{JOIN_TYPE} {RIGHT_TABLE}
ON {LEFT_TABLE.FK = RIGHT_TABLE.PK}


مثال: اريد استرجاع اسم الموظف ومن اي مدينة (هو/هي)?
SELECT [Name],[CityName]
FROM tblEmployees
INNER JOIN tblCity
ON tblEmployees.CityID = tblCity.ID



في المثال السابق استخدمنا الINNER JOIN او بأمكاننا فقط نكتب JOIN , بهذا النوع من الربط سيسترجع القيم التي بينها قيمة مشتركة في الفقرة ON واذا لم تكن القيم في احد الجدولين مرتبط بقيمة في الأخر فستهمل!

لنفرض بأن اسم الموظف "سامر" موظف ولكن في حقل الCityID لم يتم تحديد رقم المدينة اي NULL ونريد استعادة كل الموظفين بغض النظر الى ان كان قد حدد الموظف من اي مدينة هو ام لا؟
اذا استخدمنا الINNER JOIN او JOIN كما في المثال السابق, فسيهمل "سامر" ؟؟
الحل بأستخدام الربط الخارجي نوع يسار LEFT OUTER JOIN او LEFT JOIN لأن الجدول على اليسار هو جدول الموظفين وعلى اليمين جدول المدن , فستسترجع كافة البيانات من الجدول على اليسار مع القيم المشتركة من الجدول على اليمين كالأتي:


 نفس الفكرة للRight Outer Join  : حيث لو أفترضنا ان هنالك مدينة لا يوجد موظف فيها فستسترجع رغم ذلك بأستخدام الRight Join والسبب الRight  لأن جدول المدن تم تحديده على اليمين في جملة الأستعلام:



سؤال اخير اريد اسماء كل الموظفين مع نوع الجنس واسم المدينة, بغض النظر اذا قاموا بتحديد حقل المدينة او حقل الجنس, مع كل المدن(كل) سواء اذا كانوا بها موظفين ام لا؟
الجواب: كل الموظفين مع كل المدن يعني الربط الذي يجمعهم هو Full Join , مع كل الموظفين ونوع الجنس الربط الذي يجمعهم LEFT OUTER JOIN .


Comments

Popular posts from this blog

PART #2: Registration and Login System Tutorial Using PHP and MYSQL

PART #2: Registration and Login System Tutorial Using PHP and MYSQL Registration and login system using PHP and MySQL database, in this part you will do the following: 1- Creating the registration page. 2- Validating the registration form. 3- Sending the activation link on successful registration. note: you can find the mailserver tool here: [MailServerTool] Good luck. PHP,Mysql,Programming,web development,How to,Technology,web programming,web project ideas,safaa al-hayali,saf3al2a,Registration and login,Registration and login in php,php and mysql login system,registration system using php and mysql,login and register php,login and register php with database,database,php tutorial,learn php,tutorial

How To Play .srt Subtitles File in Windows Media Player

How To Play .srt Subtitles File in Windows Media Player links: https://sourceforge.net/projects/wmpsub/ wmp,.srt Subtitles File in Windows Media Player,How To Play .srt Subtitles File in Windows Media Player,How To,Safaa Al-Hayali,saf3al2a,srt subtitle in WMP,Windows,Windows Media Player,media,.ass,local subtitles

Virtual Box : How to Increase Disk Size - Windows

How to increase disk size or disk storage in oracle virtual box the command you have to use: vboxmanage.exe modifymedium "[YourPathToVdiFileOfYourVirtualMachine]" --resize [NUMBER] virtual,box,vbox,oracle,partition,size,disk,increase,resize,windows,10,microsoft,vdi,vboxmanage,configuration,Safaa AL-Hayali,saf3al2a,Oracle,VirtualBox,How to,windows 10