كما تعلم اخى الكريم ان جداول قاعدة البيانات
يتم تصميمها بناء على علاقة كل جدول بالأخر
على سبيل المثال مثلا.
عندما تدخل احد المنتديات, وتدخل احد الأقسام بالمنتدى
ترى انه تم عرض كل المواضيع التى تم وضعها بهذا القسم.
وبجانب عرض المواضيع, ترى انه يتم عرض بيانات القسم نفسه,
كا اسم القسم وقوانينه, الخ
هذا مايعرف بالـ joins
فأنت تستخرج بيان او اكثر من اكثر من جدول.
شرط ان يكون مشترك بينهم شئ واحد (وهو فى امثلتنا الـ PK والـ FK )
لنأخذ مثال. (الصورة المبسطة التى يتم بها الأمر)
كود :
SELECT topics.topic, users.username FROM topics, users WHERE topics.uid=users.uid
المثال اعلاه سوف يستخرج عناوين المواضيع, واسم كاتب الموضوع.
وسيتم الإستخراج فقط, فى حالة ان هوية كاتب الموضوع, تساوى هوية احد الأعضاء.
وسيتم الإستخراج ايضا من كل من الجدولين topics و users
والأمر نفسه يمكن ان يطبق بإستخدام الـ INNER JOIN
بالشكل التالى
كود :
SELECT topics.topic, users.username FROM topics INNER JOIN users ON topics.uid = users.uid
ملحوظة سريعة: كما تلاحظ عندما نجرى بحث واستخراج داخل اكثر من جدول بـ query واحد
يجب ان تستخدم نظام الـ . (النقطة) حيث يتم كتابة اسم الجدول ثم . ثم اسم الحقل
table_name.column_name
وايضا, ملحوظة اخرى عن الـ INNER JOIN فهى كما تلاحظ مثلها مثل نظام الفصل بين اسامى الجداول التى سيتم الإستخراج منها.
والـ INNER JOIN يستخدم كى يعود لنا بالنتائج التى تتحقق بها المشروطة فقط
والتى كانت فى مثالنا السابق ON topics.uid = users.uid
اما اذا وجد اى سجل بأحد الجدولين, ولا يتطابق مع الجدول الأخر (من حيث هوية العضو uid) فلن يتم عرضه.
هناك ايضا الـ LEFT JOIN والـ RIGHT JOIN
لنبدأ بالـ LEFT JOIN اذا فهمتها جيدا لن تحتاج لشرح الـ RIGHT JOIN
انظر المثال التالى
كود :
SELECT * FROM topics LEFT JOIN users ON topics.uid = users.uid
(لاحظ اننا وضعنا اسم جدول الـ topics على اليسار.)
الكود اعلاه, سوف يستخرج كل البيانات الموجودة بجدول الـ topics سواء كان بها uid متوافق مع احد الـ uid بجدول الـ users او ليس متوافق مع احدهم.
ولكنه سوف يستخرج من جدول الـ users فقط بيانات من يتوافق حقل الـ uid له مع الـ uid فى جدول الـ topics غير ذلك لن يتم استخراجه.
بالنسبة للـ RIGHT JOIN
فهى ستفعل نفس الشئ, لكن بدلا من ان تستخرج لنا كل بيانات الجدول الموجود على اليسار, سوف تفعل ذلك للجدول الموجود على اليمين
(وتستخرج الجدول الذى على اليسار فى حالة توافقه مع المشروطة فقط)
الـ Joins هى اشياء معقدة وتستخدم بشكل كبير فى التطبيقات الكبيرة.
لمحات بسيطة:
1. يمكنك ان تطبق Join على اكثر من جدول, او حتى لجدول واحد مع نفسه.
2. مشروطات الـ Joins يمكن ان تستخدم لحقول غير حقول الـ PK والـ FK مثلما تم شرحهم هنا.
اتمنى يكون الدرس واضح بكل جوانبه بإذن الله.
واراكم فى الدرس القادم على خير.
المصدر:
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]