قد تُخزَّن أجزاء المعلومات المختلفة في جداول مختلفة، ولجمعها معًا نستخدم INNER JOIN ... ON. وربط الجداول هو صميم عمل SQL، لكنه قد يصبح معقّدًا جدًا. سنبدأ بمثال بسيط، وسنبدأ بـINNER JOIN.
كما ترى بالأسفل، هناك 3 جداول:
character: كل شخصية صفٌّ مستقل يُمثَّل بمعرّف فريد (id)، فمثلًا 1 هو Doogie Howser
character_tv_show: لكل شخصية، في أي مسلسل تظهر؟
character_actor: لكل شخصية، من الممثّل؟
لاحظ أن character_tv_show لا يخزّن اسم الشخصية واسم المسلسل معًا (مثل Willow Rosenberg وBuffy the Vampire Slayer)، بل يخزّن character_id بديلًا عن اسم الشخصية. وهذا الـcharacter_id يشير إلى الصف المطابق في عمود id من جدول character.
ويُفعل ذلك حتى لا تتكرّر البيانات. فمثلًا، لو تغيّر اسم شخصية، لما احتجت إلى تغييره إلا في صف واحد.
وهذا يتيح لنا «ربط» الجداول معًا «عند» ذلك العمود المشترك المرجعي.
وللحصول على اسم كل شخصية مع اسم مسلسلها يمكننا كتابة
SELECT character.name, character_tv_show.tv_show_name
FROM character
INNER JOIN character_tv_show
ON character.id = character_tv_show.character_id;
هذا يضع كل صف في character بمحاذاة الصف المقابل له في character_tv_show، والعكس.
ملاحظة:
- نستخدم الصيغة اسم_الجدول.اسم_العمود. فلو استخدمنا اسم_العمود وحده، فقد يخطئ SQL في تحديد الجدول الذي يأتي منه.
- كُتب الاستعلام المثال أعلاه على عدة أسطر لسهولة القراءة، وهذا لا يؤثّر في الاستعلام.
هل يمكنك استخدام ربط داخلي لمطابقة اسم كل شخصية بالممثّل الذي يؤدّيها؟ اختر الأعمدة: character.name وcharacter_actor.actor_name