عندما يتعلق الأمر بالصلات، يعمل معظمنا بشكل أساسي بحد جدولين وما شابه. ومع ذلك، فمن الشائع الحاجة إلى الانضمام إلى ثلاثة جداول للحصول على تخطيط بيانات ورؤية أكثر وضوحًا. خذ على سبيل المثال المكان الذي تريد استرداد قائمة الأفلام فيه، ومخزون الإيجار المقابل لها، وتفاصيل الإيجار الفعلية. كل وحدة من هذه الوحدات مثل الأفلام والمخزون وتفاصيل الإيجار موجودة في جداول فردية.
في هذا البرنامج التعليمي، سنرشدك عبر الصلات والتقنيات المختلفة التي يمكنك استخدامها لربط ثلاثة جداول في SQL.
متطلبات:
لأغراض العرض التوضيحي، سوف نستخدم MySQL الإصدار 80 وقاعدة بيانات Sakila النموذجية. للمتابعة، يمكنك تنزيل قاعدة بيانات Sakila وإعدادها في خادم MySQL الخاص بك. لا تتردد في استخدام أي مجموعة بيانات أخرى تراها قابلة للتطبيق.
أنواع الانضمامات في SQL
قبل أن نصل إلى تطبيق الصلات، دعونا نبدأ بمناقشة الأنواع المختلفة من الصلات المتوفرة في قواعد بيانات SQL.
صلة داخلية
النوع الأول من الصلة هو INNER JOIN. يقوم هذا النوع من الربط بإرجاع الصفوف التي تحتوي على قيمة مطابقة في كلا الجدولين فقط. إنه نوع شائع جدًا من الربط وهو الأكثر بساطة عند ضم جدولين.
بناء الجملة هو كما يلي:
حدد الأعمدةمن الجدول 1
الانضمام الداخلي الجدول2 على table1.column_name = table2.column_name;
الانضمام الأيسر
في حالة LEFT JOIN، تقوم بإرجاع كافة الصفوف من الجدول الأيسر والصفوف المتطابقة من الجدول الأيمن. إذا لم تكن هناك قيم مطابقة من الجدول الأيمن، فإن الصلة تضيف القيم الخالية في مكانها.
بناء الجملة هو كما يلي:
حدد الأعمدةمن الجدول 1
الانضمام الأيسر الجدول 2 على table1.column_name = table2.column_name;
الانضمام الصحيح
كما يمكنك تخمين، فإن الصلة اليمنى هي عكس الصلة اليسرى. يقوم هذا النوع من الصلات بإرجاع كافة الصفوف من الجدول الأيمن والصفوف المطابقة فقط من الجدول الأيسر. إذا لم تكن هناك صفوف متطابقة في الجدول الأيسر، تضيف الصلة القيم الخالية إليه.
ما يلي هو بناء جملة RIGHT JOIN:
حدد الأعمدةمن الجدول 1
الانضمام الصحيح إلى الجدول 2 على table1.column_name = table2.column_name;
الانضمام الخارجي الكامل
النوع التالي من الصلة الذي ستواجهه في قواعد بيانات SQL هو FULL OUTER JOIN. يقوم هذا النوع من الربط بإرجاع كافة الصفوف عند وجود تطابق في الجدول الأيمن أو الأيسر. إذا لم تكن هناك قيمة مطابقة في أي من الاثنين، فسيتم إرجاع NULL للأعمدة من الجدول بدون التطابق.
يوضح ما يلي بناء جملة FULL OUTER JOIN:
حدد الأعمدةمن الجدول 1
جدول الانضمام الخارجي الكامل2 على table1.column_name = table2.column_name;
من الجيد أن تضع في اعتبارك أنه ليست كل محركات قواعد البيانات تدعم الصلات الخارجية الكاملة. لتحقيق ذلك، قد تحتاج إلى العمل مع أنواع أخرى من JOINS أو الاستعلامات الفرعية.
أمثلة:
دعونا نستكشف بعض الأمثلة حول كيفية استخدام هذه الأنواع من الصلات لربط ثلاثة جداول في SQL.
مثال 1: استخدام INNER JOIN
نبدأ مع INNER JOIN. لنفترض أننا نريد استرداد قائمة الأفلام ومخزون الإيجار وتفاصيل الإيجار المقابلة.
يمكننا استخدام روابط داخلية متعددة في الجداول المرتبطة كما هو موضح في المثال التالي:
يختارعنوان الفيلم،
مخزون.inventory_id،
rent.rental_date
من
فيلم
مخزون الانضمام الداخلي على
film.film_id = مخزون.film_id
تأجير INNER JOIN على
مخزون.inventory_id = rent.inventory_id;
في نموذج الاستعلام المحدد، نبدأ بربط جداول الأفلام والمخزون بناءً على عمود 'film_id'. بعد ذلك نأخذ المجموعة الناتجة ونربطها بجدول التأجير بناءً على عمود 'inventory_id'.
وهذا يضمن أننا ننضم إلى ثلاثة جداول باستخدام INNER JOIN الأساسي. المجموعة الناتجة هي كما يلي:
مثال 2: استخدام INNER JOIN وLEFT JOIN
لنفترض أننا نريد الآن قائمة الأفلام، وقائمة مخزونات الإيجار (إن وجدت)، وتفاصيل الإيجار المرتبطة بها.
نريد أيضًا التأكد من أنه حتى لو لم يكن الفيلم يحتوي على مخزون للتأجير، فإننا نستمر في تضمينه في النتيجة. هذا هو المكان الذي تلعب فيه INNER JOIN و LEFT JOIN.
خذ بعين الاعتبار المثال التالي:
يختارعنوان الفيلم،
مخزون.inventory_id،
rent.rental_date
من
فيلم
مخزون الانضمام الداخلي على
film.film_id = مخزون.film_id
انضم إلى تأجير اليسار على
مخزون.inventory_id = rent.inventory_id;
في هذا المثال، نستخدم INNER JOIN للانضمام إلى جدول الأفلام والمخزون لضمان حصولنا على العناوين مع المخزون المتاح. نستخدم بعد ذلك LEFT JOIN للانضمام إلى جدول التأجير لجلب تفاصيل التأجير إذا كانت متوفرة وNULL لأي عنوان ليس له سجل تأجير.
المجموعة الناتجة هي كما يلي:
خاتمة
في هذا البرنامج التعليمي، تعلمنا عن الأنواع المختلفة من JOINS في SQL، وكيفية عملها، وكيف يمكننا استخدامها للجمع بين ثلاثة جداول.