يحيى حماطي بتاريخ: 23 مارس 2005 تقديم بلاغ مشاركة بتاريخ: 23 مارس 2005 الربط في السيكيول SQL Join :الغرض من ربط الجداول ببعضها هو استخراج البيانات من أكثر من جدول في قاعدة البيانات !! كذلك يستخدم الربط كوسيلة لمنع تكرار القيم في أي حقل من حقول الجداول بصورة مزعجة أحياناً ، فمثلاً حينما يكون للطالب أكثر من مادة وتدرج جميع المواد مع اسم الطالب في نفس الجدول ، ستكون النتيجة وجود عدد كبير من السجلات لنفس الطالب في نفس الجدول ، كل سجل خاص بمادة !! وهذا غير عملي أبداً إذ أنه يؤدي إلى كبر الجدول وبالتالي زيادة المساحة التخزينية له !! لذلك فإننا نقوم بعمل جدولين جدول للطالب بكامل بياناته ( الاسم -الرقم - تاريخ الميلاد -التخصص - المعدل ... ألخ ) وجدول آخر للمواد يحوي أسم المادة وأرقام الطلاب الذين يدرسونها ، ونربط بين الجدولين برقم الطالب بالتأكيد حيث أننا اخترناه مفتاحاً لاستحالة تكراره لأكثر من طالب !!ولاستخراج بيانات من جدولين ، نستخدم المفتاح الذي يربط بينهما في الشرط ، كالتالي :SELECT Table1.any_column, Table2.any_columnFROM Table1, Table2WHERE Table1.Keycolumn = Table2.foreign_Keycolumn; مثال : اطبع اسماء الموظفين ورقم القسم الذي يعملون فيه واسم المشروع الذي يعملون عليه ؟ - ملاحظة : هذه البيانات موجودة في جدولين -الحل :SELECT FNAME , DNUM, PNAMEFROM EMPLOYEE , PROJECT WHERE DNUM = DNO;ORSELECT EMPLOYEE.FNAME, PROJECT.DNUM, PROJECT.PNAMEFROM EMPLOYEE, PROJECTWHERE PROJECT. DNUM = EMPLOYEE.DNO; هذه هي الطريقة الاعتيادية ، بينما يوجد في لغة السيكيول كلمة Join إحدى كلمات اللغة .. ولها عدة أشكال أيضاً : الأول :INNER JOIN:هذا النوع من الربط سيعطينا النتائج من الجدولين والتي يتحقق فيها الشرط ، صيغته :SELECT field1, field2, field3FROM first_table INNER JOIN second_tableON first_table.keyfield = second_table.foreign_keyfield; مثال : نفس المثال السابق :اطبع اسماء الموظفين ورقم القسم الذي يعملون فيه واسم المشروع الذي يعملون عليه ؟ الحل :SELECT EMPLOYEE.FNAME, PROJECT.DNUM, PROJECT.PNAMEFROM EMPLOYEE INNER JOIN PROJECT ON EMPLOYEE.DNO = PROJECT.DNUM; والنتيجة هي نفسها كما في الصورة السابقة . الثاني : LEFT JOIN:هذا النوع من الربط يعطينا جميع السجلات ( الصفوف ) من الجدول الأول ( وهو الجدول الذي ييكتب على يسار كلمة LEFT JOIN في الأمر ) سواء المرتبطة بقيم في الجدول الثاني أو غير المرتبطة ، جميع سجلات الجدول الأول ستظهر في النتائج ، صيغته :SELECT field1, field2, field3FROM first_table LEFT JOIN second_tableON first_table.keyfield = second_table.foreign_keyfield; مثال :اطبع قائمة باسماء الموظفين وعدد ساعات عملهم ؟ الحل :SELECT EMPLOYEE.FNAME, WORKS_ON.HOURSFROM EMPLOYEE LEFT JOIN WORKS_ON ON EMPLOYEE.NUMBER = WORKS_ON.ENUMBER; والنتيجة : ظهر لدينا السجل الذي أضفناه إلى جدول الموظفين في الدرس السابق ، سجل الموظف "MOHD AHMED" بالرغم من أننا لم نحدد له ساعات العمل في جدول العمل ،لذلك خانة الساعات أمام هذا الموظف ظهرت خالية : الثالث : RIGHT JOIN:هذا النوع من الربط هو معكوس النوع السابق تماماً ، فهو يعطينا جميع السجلات ( الصفوف ) من الجدول الثاني ( وهو الجدول الذي يأتي على يمين كلمة RIGHT JOIN عند كتابة الأمر ) سواء كانت مرتبطة بقيم في الجدول الأول أو لا ، جميع سجلات الجدول الثاني ستظهر في النتائج ، صيغته :SELECT field1, field2, field3FROM first_table RIGHT JOIN second_tableON first_table.keyfield = second_table.foreign_keyfield; وكمثال عليه :سنأخذ نفس المثال السابق ولكن سنغير ترتيب الجداول في FROM وكذلك ترتيب الحقول في SELECT ولا ننسى أن نكتب RIGHT JOIN ، كالتالي :SELECT WORKS_ON.HOURS, EMPLOYEE.FNAMEFROM WORKS_ON RIGHT JOIN EMPLOYEE ON EMPLOYEE.NUMBER = WORKS_ON.ENUMBER; مثال يوضح ربط ثلاثة جداول ببعضها البعض :اطبع اسماء الموظفين ورقم القسم الذي يعمل فيه كل موظف واسم المشروع الذي يعمل عليه وعدد ساعات عمله !الحل :SELECT EMPLOYEE.FNAME, EMPLOYEE.DNO, PROJECT.PNAME,WORKS_ON.HOURSFROM (EMPLOYEE INNER JOIN PROJECT ON EMPLOYEE.DNO = PROJECT.DNUM) INNER JOIN WORKS_ON ON (PROJECT.PNUMBER = WORKS_ON.PNO) AND (EMPLOYEE.NUMBER = WORKS_ON.ENUMBER); والنتيجة :لا نرى فيها سجل الموظف الجديد " MOHD AHMED" كما توضح الصورة التالية :بهذا نكون قد أكملنا دروس دورتنا بفضل من الله .. فالحمد لله الذي هدانا وما كنا لنتهدي لولا أن هدانا الله . الواجب :اطبع اسماء جميع الموظفين الذين تتوفر لهم البيانات التالية مع ملاحظة أن هذه البيانات ستظهر في جدول النتائج رقم الموظف - رقم القسم الذي يعمل فيه هذا الموظف - اسم المشروع الذي يعمل عليه - عدد ساعات عمله ) ؟ اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.